Secondo reagjs.org, componentWillMount non sarà supportato in futuro.
https://reactjs.org/docs/react-component.html#unsafe_componentwillmount
Non è necessario utilizzare componentWillMount.
Se vuoi fare qualcosa prima che il componente sia montato, fallo nel costruttore ().
Se si desidera eseguire richieste di rete, non farlo in componentWillMount. È perché questo porterà a bug inaspettati.
Le richieste di rete possono essere eseguite in componentDidMount.
Spero che sia d'aiuto.
aggiornato l'08 / 03/2019
Il motivo per cui si richiede componentWillMount è probabilmente perché si desidera inizializzare lo stato prima del rendering.
Fallo solo in useState.
const helloWorld=()=>{
const [value,setValue]=useState(0) //initialize your state here
return <p>{value}</p>
}
export default helloWorld;
o forse si desidera eseguire una funzione in componentWillMount, ad esempio, se il codice originale è simile al seguente:
componentWillMount(){
console.log('componentWillMount')
}
con hook, tutto ciò che devi fare è rimuovere il metodo del ciclo di vita:
const hookComponent=()=>{
console.log('componentWillMount')
return <p>you have transfered componeWillMount from class component into hook </p>
}
Voglio solo aggiungere qualcosa alla prima risposta su useEffect.
useEffect(()=>{})
useEffect viene eseguito su ogni rendering, è una combinazione di componentDidUpdate, componentDidMount e ComponentWillUnmount.
useEffect(()=>{},[])
Se aggiungiamo un array vuoto in uso, l'effetto viene eseguito solo quando il componente è montato. È perché useEffect confronterà l'array che gli è stato passato. Quindi non deve essere un array vuoto, può essere un array che non cambia. Ad esempio, può essere [1,2,3] o ['1,2']. useEffect funziona ancora solo quando il componente è montato.
Dipende da te se vuoi che venga eseguito una sola volta o venga eseguito dopo ogni rendering. Non è pericoloso se hai dimenticato di aggiungere un array fintanto che sai cosa stai facendo.
Ho creato un campione per hook. Per favore controlla.
https://codesandbox.io/s/kw6xj153wr
aggiornato il 21/08/2019
È stato un bianco da quando ho scritto la risposta sopra. C'è qualcosa a cui penso che tu debba prestare attenzione. Quando si usa
useEffect(()=>{},[])
Quando reagisce confronta i valori passati all'array [], utilizza Object.is () per confrontare. Se gli passi un oggetto, ad esempio
useEffect(()=>{},[{name:'Tom'}])
Questo è esattamente lo stesso di:
useEffect(()=>{})
Ri-renderizzerà ogni volta perché quando Object.is () confronta un oggetto, confronta il suo riferimento non il valore stesso. È lo stesso del motivo per cui {} === {} restituisce false perché i loro riferimenti sono diversi. Se vuoi ancora confrontare l'oggetto stesso con il riferimento, puoi fare qualcosa del genere:
useEffect(()=>{},[JSON.stringify({name:'Tom'})])