Judulnya menjelaskan semuanya. Saya mengerti mengapa componentDidMount
cocok 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 componentDidMount
cocok untuk apa pun yang membutuhkan akses DOM, tetapi permintaan AJAX tidak selalu atau biasanya membutuhkan ini.
Apa yang memberi?
Jawaban:
componentDidMount
untuk efek samping. Menambahkan event listener, AJAX, mutasi DOM, dll.
componentWillMount
jarang 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 componentWillMount
dari komponen kelas karena ini melayani tujuan yang sama dengan konstruktor. Ini akan tetap pada createClass
komponen.
componentWillMount
? Saya tidak begitu melihat perbedaannya.
componentWillMount
akan dieksekusi pada render sisi server. Sedangkan jika Anda menggunakan componentDidMount
maka itu hanya akan dieksekusi di sisi klien. Akibatnya, memasukkan benda-benda componentWillMount
yang 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 componentWillMount
tetapi 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 componentDidMount
untuk panggilan ajax Anda.
setState
konstruktor komponen dan Anda tidak memiliki cara untuk menentukan kapan panggilan AJAX akan selesai. twitter.com/dan_abramov/status/576453138598723585
Menurut pengaturan dokumentasi, status dalam componentWillMount
tidak akan memicu rendering ulang. Jika panggilan AJAX tidak memblokir dan Anda mengembalikan Promise
pembaruan status komponen saat berhasil, ada kemungkinan respons datang setelah komponen dirender. Karena componentWillMount
tidak 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.
componentWillMount
tidak memicu render ulang hanya karena status baru ditentukan sebelum render pertama. Tetapi jika setState
dipanggil dalam callback AJAX, itu pasti akan dipanggil setelah render pertama, dan itu akan memicu render ulang.
componentWillMount
dalamnya akan gagal karena komponen ... tidak dipasang.