Menurut reactjs.org, componentWillMount tidak akan didukung di masa depan.
https://reactjs.org/docs/react-component.html#unsafe_componentwillmount
Tidak perlu menggunakan componentWillMount.
Jika Anda ingin melakukan sesuatu sebelum komponen dipasang, lakukan saja di constructor ().
Jika Anda ingin melakukan permintaan jaringan, jangan lakukan itu di componentWillMount. Karena melakukan ini akan menyebabkan bug yang tidak terduga.
Permintaan jaringan dapat dilakukan di componentDidMount.
Semoga ini bisa membantu.
diperbarui pada 08/03/2019
Alasan mengapa Anda meminta componentWillMount mungkin karena Anda ingin menginisialisasi keadaan sebelum dirender.
Lakukan saja di useState.
const helloWorld=()=>{
const [value,setValue]=useState(0) //initialize your state here
return <p>{value}</p>
}
export default helloWorld;
atau mungkin Anda ingin menjalankan fungsi di componentWillMount, misalnya, jika kode asli Anda terlihat seperti ini:
componentWillMount(){
console.log('componentWillMount')
}
dengan hook, yang perlu Anda lakukan adalah menghapus metode siklus hidup:
const hookComponent=()=>{
console.log('componentWillMount')
return <p>you have transfered componeWillMount from class component into hook </p>
}
Saya hanya ingin menambahkan sesuatu ke jawaban pertama tentang useEffect.
useEffect(()=>{})
useEffect berjalan pada setiap render, itu adalah kombinasi dari componentDidUpdate, componentDidMount, dan ComponentWillUnmount.
useEffect(()=>{},[])
Jika kita menambahkan array kosong di useEffect, ia berjalan tepat saat komponen di-mount. Itu karena useEffect akan membandingkan array yang Anda berikan padanya. Jadi itu tidak harus menjadi array kosong. Ini bisa menjadi array yang tidak berubah. Misalnya, bisa [1,2,3] atau ['1,2']. useEffect masih hanya berjalan ketika komponen dipasang.
Itu tergantung pada Anda apakah Anda ingin menjalankan hanya sekali atau berjalan setelah setiap render. Tidak berbahaya jika Anda lupa menambahkan array selama Anda tahu apa yang Anda lakukan.
Saya membuat sampel untuk kail. Silakan periksa.
https://codesandbox.io/s/kw6xj153wr
diperbarui pada 21/08/2019
Sudah putih sejak saya menulis jawaban di atas. Ada sesuatu yang saya pikir perlu Anda perhatikan. Saat Anda menggunakan
useEffect(()=>{},[])
Saat bereaksi membandingkan nilai yang Anda berikan ke array [], ia menggunakan Object.is () untuk membandingkan. Jika Anda melewatkan objek ke sana, seperti
useEffect(()=>{},[{name:'Tom'}])
Ini persis sama dengan:
useEffect(()=>{})
Itu akan merender ulang setiap kali karena ketika Object.is () membandingkan suatu objek, itu membandingkan referensi bukan nilai itu sendiri. Itu sama dengan mengapa {} === {} menghasilkan false karena referensi mereka berbeda. Jika Anda masih ingin membandingkan objek itu sendiri bukan referensi, Anda dapat melakukan sesuatu seperti ini:
useEffect(()=>{},[JSON.stringify({name:'Tom'})])