Laut reactjs.org wird componentWillMount in Zukunft nicht mehr unterstützt.
https://reactjs.org/docs/react-component.html#unsafe_componentwillmount
Es ist nicht erforderlich, componentWillMount zu verwenden.
Wenn Sie etwas tun möchten, bevor die Komponente bereitgestellt wurde, tun Sie dies einfach im Konstruktor ().
Wenn Sie Netzwerkanforderungen ausführen möchten, tun Sie dies nicht in componentWillMount. Dies liegt daran, dass dies zu unerwarteten Fehlern führt.
Netzwerkanforderungen können in componentDidMount ausgeführt werden.
Ich hoffe es hilft.
aktualisiert am 08/03/2019
Der Grund, warum Sie nach componentWillMount fragen, liegt wahrscheinlich darin, dass Sie den Status vor dem Rendern initialisieren möchten.
Mach es einfach in useState.
const helloWorld=()=>{
const [value,setValue]=useState(0) //initialize your state here
return <p>{value}</p>
}
export default helloWorld;
oder vielleicht möchten Sie eine Funktion in componentWillMount ausführen, wenn Ihr ursprünglicher Code folgendermaßen aussieht:
componentWillMount(){
console.log('componentWillMount')
}
Mit Hook müssen Sie lediglich die Lebenszyklusmethode entfernen:
const hookComponent=()=>{
console.log('componentWillMount')
return <p>you have transfered componeWillMount from class component into hook </p>
}
Ich möchte der ersten Antwort zu useEffect nur etwas hinzufügen.
useEffect(()=>{})
useEffect wird bei jedem Rendering ausgeführt und ist eine Kombination aus componentDidUpdate, componentDidMount und ComponentWillUnmount.
useEffect(()=>{},[])
Wenn wir in useEffect ein leeres Array hinzufügen, wird es nur ausgeführt, wenn die Komponente bereitgestellt wird. Dies liegt daran, dass useEffect das Array vergleicht, das Sie an es übergeben haben. Es muss also kein leeres Array sein. Es kann sich um ein Array handeln, das sich nicht ändert. Zum Beispiel kann es [1,2,3] oder ['1,2'] sein. useEffect wird immer noch nur ausgeführt, wenn die Komponente bereitgestellt ist.
Es hängt von Ihnen ab, ob es nur einmal oder nach jedem Rendern ausgeführt werden soll. Es ist nicht gefährlich, wenn Sie vergessen haben, ein Array hinzuzufügen, solange Sie wissen, was Sie tun.
Ich habe ein Beispiel für Hook erstellt. Bitte probieren Sie es aus.
https://codesandbox.io/s/kw6xj153wr
aktualisiert am 21/08/2019
Es ist weiß, seit ich die obige Antwort geschrieben habe. Ich denke, Sie müssen auf etwas achten. Wenn Sie verwenden
useEffect(()=>{},[])
Wenn reag die Werte vergleicht, die Sie an das Array [] übergeben haben, wird Object.is () zum Vergleichen verwendet. Wenn Sie ein Objekt daran übergeben, z
useEffect(()=>{},[{name:'Tom'}])
Dies ist genau das gleiche wie:
useEffect(()=>{})
Es wird jedes Mal neu gerendert, da beim Vergleichen eines Objekts durch Object.is () dessen Referenz und nicht der Wert selbst verglichen wird. Es ist dasselbe wie der Grund, warum {} === {} false zurückgibt, weil ihre Referenzen unterschiedlich sind. Wenn Sie immer noch das Objekt selbst und nicht die Referenz vergleichen möchten, können Sie Folgendes tun:
useEffect(()=>{},[JSON.stringify({name:'Tom'})])