Il titolo dice tutto. Capisco perché componentDidMount
è appropriato per tutto ciò che richiede l'accesso DOM, ma una richiesta AJAX non necessariamente o di solito ne ha bisogno.
Cosa succede?
Il titolo dice tutto. Capisco perché componentDidMount
è appropriato per tutto ciò che richiede l'accesso DOM, ma una richiesta AJAX non necessariamente o di solito ne ha bisogno.
Cosa succede?
Risposte:
componentDidMount
è per gli effetti collaterali. Aggiunta di listener di eventi, AJAX, modifica del DOM, ecc.
componentWillMount
è raramente utile; soprattutto se ti interessa il rendering lato server (l'aggiunta di listener di eventi causa errori e fughe di notizie e molte altre cose che possono andare storte).
Si parla di rimuovere componentWillMount
dai componenti di classe poiché ha lo stesso scopo del costruttore. Rimarrà sui createClass
componenti.
componentWillMount
? Non vedo davvero la differenza.
componentWillMount
verrà eseguita su un rendering lato server. Dov'è che se lo stessi usando, componentDidMount
verrebbe eseguito solo sul lato client. Di conseguenza, inserire cose componentWillMount
che eseguono interazioni esterne o si legano a eventi, ecc., Non è una grande idea. Se non si prevede di eseguire il rendering dei componenti sul lato server, non è ancora una buona idea solo per la potenziale portabilità del codice. Questo è tutto al di fuori del motivo principale per cui è brutto, spiegato nella risposta di @daniula.
Ho avuto lo stesso problema anche all'inizio. Ho deciso di provare a fare richieste incomponentWillMount
ma si finisce in vari piccoli problemi.
Stavo attivando il rendering quando la chiamata ajax termina con nuovi dati. Ad un certo punto il rendering del componente ha richiesto più tempo che ottenere una risposta dal server ea questo punto il callback ajax ha attivato il rendering sul componente non montato. Questo è un caso limite ma probabilmente ce n'è di più, quindi è più sicuro attenersi componentDidMount
.
componentWillMount
, quindi dovresti continuare a usarlo componentDidMount
per le tue chiamate ajax.
setState
un costruttore di componenti e non hai modo di determinare quando la chiamata AJAX verrà completata. twitter.com/dan_abramov/status/576453138598723585
Secondo la documentazione, l'impostazione dello stato in componentWillMount
non attiverà un nuovo rendering. Se la chiamata AJAX non si blocca e si restituisce un Promise
aggiornamento che aggiorna lo stato del componente in caso di successo, ci sono possibilità che la risposta arrivi una volta che il componente è stato renderizzato. ComecomponentWillMount
non innesca un nuovo rendering, non avrai il comportamento che ti aspettavi, ovvero il componente che viene visualizzato con i dati richiesti.
Se usi una qualsiasi delle librerie di flusso e i dati richiesti finiscono nel negozio a cui è connesso il componente (o ereditano da un componente connesso) questo non sarà un problema poiché la ricezione di quei dati, molto probabilmente, cambierà le props infine.
componentWillMount
non attiva un nuovo rendering solo perché un nuovo stato è definito prima del primo rendering. Ma se setState
viene chiamato in un callback AJAX, sarà sicuramente chiamato dopo il primo rendering e attiverà un nuovo rendering.
componentWillMount
esso fallirebbe dato che il componente ... non è stato montato.