Jawaban saya sedikit keluar dari bidang kiri. Ini menjelaskan masalah yang membawa saya ke posting ini. Dalam kasus saya, tampaknya aplikasi tersebut Tidak merender ulang, meskipun menerima alat peraga baru.
React devs memiliki jawaban untuk pertanyaan yang sering ditanyakan ini, sesuatu yang sesuai jika (store) dimutasi, 99% dari waktu itulah alasan react tidak akan dirender ulang. Namun tidak ada tentang 1% lainnya. Mutasi tidak terjadi di sini.
TLDR;
componentWillReceivePropsadalah bagaimana statedapat tetap disinkronkan dengan yang baru props.
Tepi Kasus: Setelah stateupdate, maka aplikasi tidak re-render!
Ternyata jika aplikasi Anda hanya menggunakan stateuntuk menampilkan elemennya, propsdapat memperbarui, tetapi statetidak mau, jadi tidak ada render ulang.
Saya punya stateyang tergantung pada yang propsditerima dari redux store. Data yang saya butuhkan belum ada di toko, jadi saya mengambilnya componentDidMountsebagaimana mestinya. Saya mendapatkan propsnya kembali, ketika peredam saya memperbarui toko, karena komponen saya terhubung melalui mapStateToProps. Tetapi halaman tersebut tidak merender, dan statusnya masih penuh dengan string kosong.
Contohnya adalah pengguna memuat halaman "edit posting" dari url yang disimpan. Anda memiliki akses ke postIddari url, tetapi infonya belum masuk store, jadi Anda mengambilnya. Item di halaman Anda adalah komponen yang dikontrol - jadi semua data yang Anda tampilkan ada di dalamnya state.
Menggunakan redux, data diambil, penyimpanan diperbarui, dan komponen connectdiedit, tetapi aplikasi tidak mencerminkan perubahan. Dilihat lebih dekat, propsditerima, tetapi aplikasi tidak diperbarui. statetidak diperbarui.
Yah, propsakan memperbarui dan menyebarkan, tetapi statetidak. Anda perlu memberi tahu secara khusus stateuntuk memperbarui.
Anda tidak dapat melakukan ini render(), dan componentDidMountsudah menyelesaikan siklusnya.
componentWillReceivePropsadalah tempat Anda memperbarui stateproperti yang bergantung pada propnilai yang diubah .
Contoh Penggunaan:
componentWillReceiveProps(nextProps){
if (this.props.post.category !== nextProps.post.category){
this.setState({
title: nextProps.post.title,
body: nextProps.post.body,
category: nextProps.post.category,
})
}
}
Saya harus berteriak ke artikel ini yang mencerahkan saya tentang solusi yang gagal disebutkan oleh puluhan postingan, blog, dan repo lain. Siapa pun yang kesulitan menemukan jawaban untuk masalah yang jelas tidak jelas ini, Ini dia:
Metode siklus hidup komponen ReactJs - Menyelami lebih dalam
componentWillReceivePropsadalah tempat Anda akan memperbarui stateagar tetap sinkron dengan propspembaruan.
Setelah statediperbarui, kemudian bidang bergantung pada state lakukan render ulang!