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;
componentWillReceiveProps
adalah bagaimana state
dapat tetap disinkronkan dengan yang baru props
.
Tepi Kasus: Setelah state
update, maka aplikasi tidak re-render!
Ternyata jika aplikasi Anda hanya menggunakan state
untuk menampilkan elemennya, props
dapat memperbarui, tetapi state
tidak mau, jadi tidak ada render ulang.
Saya punya state
yang tergantung pada yang props
diterima dari redux store
. Data yang saya butuhkan belum ada di toko, jadi saya mengambilnya componentDidMount
sebagaimana 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 postId
dari 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 connect
diedit, tetapi aplikasi tidak mencerminkan perubahan. Dilihat lebih dekat, props
diterima, tetapi aplikasi tidak diperbarui. state
tidak diperbarui.
Yah, props
akan memperbarui dan menyebarkan, tetapi state
tidak. Anda perlu memberi tahu secara khusus state
untuk memperbarui.
Anda tidak dapat melakukan ini render()
, dan componentDidMount
sudah menyelesaikan siklusnya.
componentWillReceiveProps
adalah tempat Anda memperbarui state
properti yang bergantung pada prop
nilai 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
componentWillReceiveProps
adalah tempat Anda akan memperbarui state
agar tetap sinkron dengan props
pembaruan.
Setelah state
diperbarui, kemudian bidang bergantung pada state
lakukan render ulang!