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 p>
4 Réponses :
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!');
}
Vous devez faire quelques modifications dans votre code actuel
Votre nouveau code est quelque peu regarder comme suit p>
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.
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] });
}
})
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 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. P> au lieu d'utiliser: p> si (cela.state.old_item! == D [0]) P>
blockQuote> juste faire p> si (! aobjeObjequal (this.state.old_item, d [0]) p>
BlockQuote> 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. P> p>
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 ..