0
votes

Je veux alerter si une valeur JSON change alors la mise à jour dans l'état, puis console.log.

Je cherche une alerte en cas d'alerte s'il y a une modification du JSON, il mettrait à jour l'état et que les données sont modifiées, malheureusement, cette étape était en boucle de "données modifiées" si les données JSON n'ont pas changé.

Voici mon échantillon de code xxx


6 commentaires

Pourquoi utilisez-vous seinterval dans ComponentDidMount?


Vous ne pouvez pas comparer objet comme ceci (this.state.old_item! == D [0]) ;;


Alors, que sera la bonne chose? Parce que je veux exécuter l'extraction toutes les 10 secondes et alerter si quelque chose a changé.


Vous pouvez utiliser ceci .. const OldState = ceci.state.old_De_item [0]; Si (Oldstate.price_usd! == D [0] ["Price_USD"]) {// Corps}


@Dammak a raison !. Erreur est dans votre comparaison


@Saumyadeeepkarkar, je ne suis pas sûr de ce que vous voulez comparer, c'est que chaque valeur de l'objet ou juste une valeur .. Mieux encore, vous pouvez simplement écrire une fonction comparant toute la valeur si elles sont identiques ..


4 Réponses :


0
votes

C'est parce que vous essayez de comparer deux objets. Voir le code ci-dessous.

let a = {'a':1};
let b = {'a':1};
if(a!==b){
    alert('Not Same!');
}else{
    alert('Same!');
}


0 commentaires

0
votes

Vous devez faire quelques modifications dans votre code actuel

  1. vous comparez en mauvais sens. Ce n'est pas une bonne façon de comparer la gamme d'objets. Vous devez comparer les clés pour vérifier si la valeur est modifiée ou non
  2. SetState est asynchrone alors console.Log peut ou non être le feu avant que l'état soit ensemble. Donc, c'est pourquoi la console devrait être dans le rappel de l'instate.

    Votre nouveau code est quelque peu regarder comme suit xxx


6 commentaires

Vous devez mettre à jour le snippet il y a une petite erreur ... Vous devez spécifier l'index de l'ancien istate si (this.state.old_item [0] ["Votre clé"]! == D [0] ["Votre clé "]) {this.setstate ({old_item [0]: d [0]}, () => {console.log (" Données modifiées ");})


Eh bien, j'ai eu le point et merci @dammak et pardeep Sharma, mais pouvez-vous dire comment je peux faire ce travail pour bavarder JSON?


@Saumyadeeepkarkar je ne sais pas ce que tu voulais dire par chat Json .. Pouvez-vous expliquer


Bien que je viens d'écrire une fonction comparant 2 objets tant que la structure d'objet sont les mêmes ... il comparera la valeur ... peut-être que je vais simplement le poster ici maintenant


J'ai des données JSON de conversations de la base de données que j'ai besoin de comparer si l'OLD_DATA est modifié dans la nouvelle réponse des données JSON ou non, si oui je veux alerter


@SaumyadeeepSarkar Si vous pensez que c'est correct et que cela vous permettra de us.



0
votes

Je viens d'écrire une fonction comparant deux valeur d'objet tant que la structure des deux objets est la même.

Bien que cela ne soit pas optimisé, mais il peut faire le travail pour vous. p>

p>

GetCryptoData (){
const dataURL = "https://api.coinmarketcap.com/v1/ticker/bitcoin/";
fetch(dataURL)
.then(d => d.json())
.then(d => {
    if (compareObject(this.state.Old_item[0], d[0]) {
        this.setState({ Old_item: d[0] });
    }

})


0 commentaires

0
votes

Comme chacun ci-dessus mentionne, vous ne pouvez pas comparer des objets comme ça. Parce que les objets ne sont pas des littéraux primitifs. Ce qui signifie qu'ils sont passés par référence non par valeur. En termes simples xxx

donc j'utilise généralement des fonctions différentes de la mienne pour comparer des objets. Si vous n'avez besoin que d'un comparateur peu profond, la fonction simple suivante suffira. Si vous avez besoin de plus qu'un comparateur peu profond, vous aurez besoin d'une fonction plus complexe. xxx

au lieu d'utiliser:

si (cela.state.old_item! == D [0])

juste faire

si (! aobjeObjequal (this.state.old_item, d [0])

Si le problème persiste, cela pourrait être dû aux objets profondément imbriqués ou en raison de la nature asynchrone de l'État. Donc, vous devrez examiner ces facteurs.


0 commentaires