Je suis nouveau dans la bibliothèque React.js et je passais en revue certains des tutoriels et je suis tombé sur:
this.setState
this.replaceState
La description donnée n'est pas très claire (IMO).
setState is done to 'set' the state of a value, even if its already set
in the 'getInitialState' function.
De même,
The replaceState() method is for when you want to clear out the values
already in state, and add new ones.
J'ai essayé this.setState({data: someArray});
suivi de this.replaceState({test: someArray});
puis console.logged eux et j'ai trouvé que state
maintenant avait à la fois data
et test
.
Ensuite, j'ai essayé de les this.setState({data: someArray});
suivre this.setState({test: someArray});
, puis de les consigner par console et j'ai trouvé que state
j'avais à nouveau data
et test
.
Alors, quelle est exactement la différence entre les deux?
javascript
frontend
reactjs
myusuf
la source
la source
Réponses:
Avec
setState
les états actuel et précédent sont fusionnés. AvecreplaceState
, il jette l'état actuel et le remplace uniquement par ce que vous fournissez. IlsetState
est généralement utilisé sauf si vous devez vraiment supprimer des clés pour une raison quelconque; mais les définir sur false / null est généralement une tactique plus explicite.Bien que cela soit possible, cela pourrait changer; replaceState utilise actuellement l'objet passé comme état, c'est
replaceState(x)
-à- dire et une fois qu'il est définithis.state === x
. C'est un peu plus léger quesetState
, donc cela pourrait être utilisé comme une optimisation si des milliers de composants définissent fréquemment leur état.Je l'ai affirmé avec ce cas de test .
Si votre état actuel est
{a: 1}
, et que vous appelezthis.setState({b: 2})
; lorsque l'état sera appliqué, il le sera{a: 1, b: 2}
. Si vous avez appeléthis.replaceState({b: 2})
votre état serait{b: 2}
.Remarque: l'état n'est pas défini instantanément, alors ne le faites pas
this.setState({b: 1}); console.log(this.state)
lors des tests.la source
.setState({...}, callback)
Définition par exemple:
Prenez note de ceci dans la documentation , cependant:
De même pour
replaceState()
la source
Selon la documentation ,
replaceState
pourrait devenir obsolète:la source
Depuis
replaceState
est maintenant obsolète, voici une solution de contournement très simple. Bien qu'il soit probablement assez rare que vous ayez / devriez recourir à cela.Pour supprimer l'état:
Ou, alternativement, si vous ne voulez pas avoir plusieurs appels vers
setState
Essentiellement, toutes les clés précédentes dans l'état retournent maintenant
undefined
, ce qui peut très facilement être filtré avec uneif
instruction:Dans JSX:
Enfin, pour "remplacer" l'état, combinez simplement le nouvel objet d'état avec une copie de l'ancien état qui a été
undefined
, et définissez-le comme état:la source