Le titre dit tout. Je comprends pourquoi componentDidMount
est approprié pour tout ce qui nécessite un accès DOM, mais une requête AJAX n'en a pas nécessairement ou généralement besoin.
Ce qui donne?
Le titre dit tout. Je comprends pourquoi componentDidMount
est approprié pour tout ce qui nécessite un accès DOM, mais une requête AJAX n'en a pas nécessairement ou généralement besoin.
Ce qui donne?
Réponses:
componentDidMount
est pour les effets secondaires. Ajout d'écouteurs d'événements, AJAX, mutation du DOM, etc.
componentWillMount
est rarement utile; surtout si vous vous souciez du rendu côté serveur (l'ajout d'écouteurs d'événements provoque des erreurs et des fuites, et beaucoup d'autres choses qui peuvent mal tourner).
On parle de supprimer componentWillMount
des composants de classe car cela sert le même objectif que le constructeur. Il restera sur les createClass
composants.
componentWillMount
? Je ne vois pas vraiment la distinction.
componentWillMount
sera exécuté sur un rendu côté serveur. Wheras si vous utilisiez componentDidMount
alors cela ne serait exécuté que côté client. En conséquence, mettre des éléments componentWillMount
qui effectuent des interactions externes ou se lient à des événements, etc., n'est pas une bonne idée. Si vous n'avez pas l'intention de rendre vos composants côté serveur, ce n'est toujours pas une bonne idée juste pour la portabilité potentielle du code. Tout cela est en dehors de la principale raison pour laquelle c'est mauvais qui est expliqué dans la réponse de @daniula.
J'ai eu le même problème au début aussi. J'ai décidé d'essayer de faire des demandes, componentWillMount
mais cela se termine par divers petits problèmes.
Je déclenchais le rendu lorsque l'appel ajax se termine avec de nouvelles données. À un moment donné, le rendu du composant prenait plus de temps que l'obtention de la réponse du serveur et à ce stade, le rappel ajax déclenchait le rendu sur le composant non monté. C'est une sorte de cas extrême, mais il y en a probablement plus, il est donc plus sûr de s'en tenir componentDidMount
.
componentWillMount
, vous devez donc continuer à l'utiliser componentDidMount
pour vos appels ajax.
setState
un constructeur de composant et vous n'avez aucun moyen de déterminer quand l'appel AJAX se terminera. twitter.com/dan_abramov/status/576453138598723585
Selon la documentation, le réglage de l'état dans componentWillMount
ne déclenchera pas de re-rendu. Si l'appel AJAX ne bloque pas et que vous retournez un Promise
qui met à jour l'état du composant en cas de succès, il y a des chances que la réponse arrive une fois que le composant a été rendu. Comme componentWillMount
ne déclenche pas de nouveau rendu, vous n'aurez pas le comportement attendu, à savoir le composant rendu avec les données demandées.
Si vous utilisez l'une des bibliothèques de flux et que les données demandées se retrouvent dans le magasin auquel le composant est connecté (ou héritent d'un composant connecté), ce ne sera pas un problème car la réception de ces données changera très probablement les accessoires. finalement.
componentWillMount
ne déclenche pas un nouveau rendu simplement parce qu'un nouvel état est défini avant le premier rendu. Mais s'il setState
est appelé dans un callback AJAX, il sera très certainement appelé après le premier rendu, et il déclenchera un nouveau rendu.
componentWillMount
cela échouerait étant donné que le composant ... n'a pas été monté.