Reaktjs.org'a göre, componentWillMount gelecekte desteklenmeyecek.
https://reactjs.org/docs/react-component.html#unsafe_componentwillmount
ComponentWillMount kullanmaya gerek yoktur.
Bileşen monte edilmeden önce bir şey yapmak istiyorsanız, bunu yapıcıda () yapın.
Ağ istekleri yapmak istiyorsanız, componentWillMount içinde yapmayın. Çünkü bunu yapmak beklenmedik hatalara yol açacaktır.
Ağ istekleri componentDidMount içinde yapılabilir.
Umarım yardımcı olur.
08/03/2019 tarihinde güncellendi
ComponentWillMount istemenizin nedeni büyük olasılıkla durumu işlemeden önce başlatmak istemenizdir.
Sadece kullanımda yapın.
const helloWorld=()=>{
const [value,setValue]=useState(0) //initialize your state here
return <p>{value}</p>
}
export default helloWorld;
ya da örneğin, orijinal kodunuz aşağıdaki gibi görünüyorsa, componentWillMount'ta bir işlev çalıştırmak istersiniz:
componentWillMount(){
console.log('componentWillMount')
}
kanca ile, yapmanız gereken tek şey yaşam döngüsü yöntemini kaldırmaktır:
const hookComponent=()=>{
console.log('componentWillMount')
return <p>you have transfered componeWillMount from class component into hook </p>
}
UseEffect ile ilgili ilk cevaba bir şeyler eklemek istiyorum.
useEffect(()=>{})
useEffect her renderde çalışır, componentDidUpdate, componentDidMount ve ComponentWillUnmount birleşimidir.
useEffect(()=>{},[])
UseEffect öğesine boş bir dizi eklersek, bileşen monte edildiğinde çalışır. UseEffect'in kendisine ilettiğiniz diziyi karşılaştırmasıdır. Bu yüzden boş bir dizi olmak zorunda değildir. Değişmeyen bir dizi olabilir. Örneğin, [1,2,3] veya ['1,2'] olabilir. useEffect yine de yalnızca bileşen monte edildiğinde çalışır.
Sadece bir kez çalışmasını veya her işlemden sonra çalışmasını isteyip istemediğinize bağlıdır. Ne yaptığınızı bildiğiniz sürece bir dizi eklemeyi unutmanız tehlikeli değildir.
Kanca için bir örnek oluşturdum. Lütfen kontrol et.
https://codesandbox.io/s/kw6xj153wr
21/08/2019 tarihinde güncellendi
Yukarıdaki cevabı yazdığımdan beri beyaz oldu. Dikkat etmeniz gerektiğini düşündüğüm bir şey var. Kullandığınızda
useEffect(()=>{},[])
Tepki [] dizisine ilettiğiniz değerleri karşılaştırdığında, karşılaştırmak için Object.is () kullanır. Eğer ona bir nesne iletirseniz, örneğin
useEffect(()=>{},[{name:'Tom'}])
Bu tam olarak aynı:
useEffect(()=>{})
Object.is () bir nesneyi karşılaştırdığında, değerin kendisini değil referansını karşılaştırdığı için her seferinde yeniden oluşturulur. {} === {}, neden referansları farklı olduğu için yanlış döndürdüğü ile aynı. Nesnenin kendisini referans değil karşılaştırmak istiyorsanız, bunun gibi bir şey yapabilirsiniz:
useEffect(()=>{},[JSON.stringify({name:'Tom'})])