Judulnya menjelaskan semuanya. Saya mengerti mengapa componentDidMountcocok untuk apa pun yang membutuhkan akses DOM, tetapi permintaan AJAX tidak selalu atau biasanya membutuhkan ini.
Apa yang memberi?
Judulnya menjelaskan semuanya. Saya mengerti mengapa componentDidMountcocok untuk apa pun yang membutuhkan akses DOM, tetapi permintaan AJAX tidak selalu atau biasanya membutuhkan ini.
Apa yang memberi?
Jawaban:
componentDidMountuntuk efek samping. Menambahkan event listener, AJAX, mutasi DOM, dll.
componentWillMountjarang berguna; terutama jika Anda peduli tentang rendering sisi server (menambahkan event listener menyebabkan kesalahan dan kebocoran, dan banyak hal lain yang bisa salah).
Ada pembicaraan tentang penghapusan componentWillMountdari komponen kelas karena ini melayani tujuan yang sama dengan konstruktor. Ini akan tetap pada createClasskomponen.
componentWillMount? Saya tidak begitu melihat perbedaannya.
componentWillMountakan dieksekusi pada render sisi server. Sedangkan jika Anda menggunakan componentDidMountmaka itu hanya akan dieksekusi di sisi klien. Akibatnya, memasukkan benda-benda componentWillMountyang melakukan interaksi eksternal atau mengikat ke acara dll, bukanlah ide yang bagus. Jika Anda tidak memiliki rencana untuk merender komponen Anda di sisi server, itu masih bukan ide yang baik hanya untuk portabilitas kode potensial. Ini semua di luar alasan utama buruk yang dijelaskan dalam jawaban @daniula.
Saya juga mengalami masalah yang sama pada awalnya. Saya memutuskan untuk mencoba membuat permintaan componentWillMounttetapi berakhir di berbagai masalah kecil.
Saya memicu rendering ketika panggilan ajax selesai dengan data baru. Pada titik tertentu, rendering komponen membutuhkan lebih banyak waktu daripada mendapatkan respons dari server dan pada titik ini callback ajax memicu render pada komponen yang tidak terpasang. Ini adalah jenis casing tepi tetapi mungkin ada lebih banyak, jadi lebih aman untuk mematuhinya componentDidMount.
componentWillMount, jadi Anda harus tetap menggunakan componentDidMountuntuk panggilan ajax Anda.
setStatekonstruktor komponen dan Anda tidak memiliki cara untuk menentukan kapan panggilan AJAX akan selesai. twitter.com/dan_abramov/status/576453138598723585
Menurut pengaturan dokumentasi, status dalam componentWillMounttidak akan memicu rendering ulang. Jika panggilan AJAX tidak memblokir dan Anda mengembalikan Promisepembaruan status komponen saat berhasil, ada kemungkinan respons datang setelah komponen dirender. Karena componentWillMounttidak memicu render ulang, Anda tidak akan memiliki perilaku yang Anda harapkan, yaitu komponen yang dirender dengan data yang diminta.
Jika Anda menggunakan salah satu pustaka fluks dan data yang diminta berakhir di penyimpanan komponen yang terhubung (atau mewarisi dari komponen yang terhubung) ini tidak akan menjadi masalah karena penerimaan data itu, kemungkinan besar, akan mengubah alat peraga akhirnya.
componentWillMounttidak memicu render ulang hanya karena status baru ditentukan sebelum render pertama. Tetapi jika setStatedipanggil dalam callback AJAX, itu pasti akan dipanggil setelah render pertama, dan itu akan memicu render ulang.
componentWillMountdalamnya akan gagal karena komponen ... tidak dipasang.