Sepertinya componentWillReceiveProps
akan sepenuhnya dihapus dalam rilis mendatang, mendukung metode siklus hidup baru getDerivedStateFromProps
: getDerivedStateFromProps statis () .
Setelah diperiksa, sepertinya Anda sekarang tidak dapat membuat perbandingan langsung antara this.props
dan nextProps
, seperti yang Anda bisa lakukan componentWillReceiveProps
. Apakah ada cara untuk mengatasi ini?
Juga, sekarang mengembalikan objek. Apakah saya benar mengasumsikan bahwa nilai pengembalian pada dasarnya this.setState
?
Di bawah ini adalah contoh yang saya temukan online: Negara bagian berasal dari properti / negara bagian .
Sebelum
class ExampleComponent extends React.Component {
state = {
derivedData: computeDerivedState(this.props)
};
componentWillReceiveProps(nextProps) {
if (this.props.someValue !== nextProps.someValue) {
this.setState({
derivedData: computeDerivedState(nextProps)
});
}
}
}
Setelah
class ExampleComponent extends React.Component {
// Initialize state in constructor,
// Or with a property initializer.
state = {};
static getDerivedStateFromProps(nextProps, prevState) {
if (prevState.someMirroredValue !== nextProps.someValue) {
return {
derivedData: computeDerivedState(nextProps),
someMirroredValue: nextProps.someValue
};
}
// Return null to indicate no change to state.
return null;
}
}
sumber
componentWillReceiveProps
getDerivedStateFromProps
tidak pernah benar-benar dimaksudkan untuk memoisasi . Silakan lihat jawaban saya di bawah di mana saya menggambarkan pendekatan yang direkomendasikan sebagai gantinya....
? Itulah yang harus kita kembalikan seluruh objek keadaan atau hanya bagian yang kita pedulikan.Seperti yang baru-baru ini kami posting di blog Bereaksi , dalam sebagian besar kasus Anda tidak perlu
getDerivedStateFromProps
sama sekali .Jika Anda hanya ingin menghitung beberapa data turunan, baik:
render
memoize-one
.Inilah contoh "setelah" yang paling sederhana:
Lihatlah bagian posting blog ini untuk mempelajari lebih lanjut.
sumber
componentWillReceiveProps
sederhana dan berhasil. Mengapa menghapusnya untuk sampah statis ini ...Seperti yang disebutkan oleh Dan Abramov
Kami benar-benar menggunakan pendekatan itu dengan memoise satu untuk segala jenis alat proxy untuk menyatakan perhitungan.
Kode kami terlihat seperti ini
Manfaatnya adalah Anda tidak perlu kode ton boilerplate perbandingan di dalam
getDerivedStateFromProps
ataucomponentWillReceiveProps
dan Anda dapat melewati inisialisasi salin-tempel di dalam konstruktor.CATATAN:
Pendekatan ini hanya digunakan untuk proksi alat peraga untuk menyatakan, jika Anda memiliki beberapa logika keadaan dalam, masih perlu ditangani dalam siklus hidup komponen.
sumber