getDerivedStateFromProps
adalah kaedah kitaran hayat statik dalam React yang membolehkan anda mengemas kini keadaan komponen berdasarkan perubahan pada alat peraganya. Ia dipanggil betul sebelum proses rendering apabila komponen menerima alat baru. Kaedah ini mengambil dua parameter: nextProps
dan prevState
, dan ia mesti mengembalikan objek untuk mengemas kini keadaan atau null
untuk menunjukkan tiada perubahan kepada keadaan diperlukan. Ia adalah pengganti kaedah componentWillReceiveProps
yang telah ditetapkan dan digunakan untuk mengendalikan senario di mana anda perlu bertindak balas terhadap perubahan prop dan mengemas kini keadaan komponen dengan sewajarnya.
Inilah contoh mudah bagaimana ia boleh digunakan:
<code class="jsx">class ExampleComponent extends React.Component { static getDerivedStateFromProps(nextProps, prevState) { if (nextProps.someProp !== prevState.someProp) { return { someProp: nextProps.someProp }; } return null; } constructor(props) { super(props); this.state = { someProp: props.someProp, }; } render() { return <div>{this.state.someProp}</div>; } }</code>
getDerivedStateFromProps
harus digunakan dalam senario tertentu di mana anda perlu mengemas kini keadaan komponen sebagai tindak balas kepada perubahan dalam alat komponen. Beberapa kes penggunaan biasa termasuk:
getDerivedStateFromProps
untuk mengemas kini negara berdasarkan nilai prop baru. Sebagai contoh, jika anda membina komponen borang di mana prop menunjukkan sama ada borang itu dalam keadaan 'menetapkan semula', anda boleh menggunakan getDerivedStateFromProps
untuk menetapkan semula keadaan dalaman borang apabila prop 'Reset' ditetapkan untuk benar:
<code class="jsx">class FormComponent extends React.Component { static getDerivedStateFromProps(nextProps, prevState) { if (nextProps.resetForm && nextProps.resetForm !== prevState.resetForm) { return { formData: {}, resetForm: nextProps.resetForm, }; } return null; } constructor(props) { super(props); this.state = { formData: {}, resetForm: props.resetForm, }; } render() { return <form>{/* form elements */}</form>; } }</code>
Penggunaan getDerivedStateFromProps
boleh mempunyai kesan positif dan negatif terhadap prestasi komponen:
Impak positif:
getDerivedStateFromProps
berjalan serentak sebelum membuat rendering, ia memastikan bahawa negara dikemas kini sebelum komponen komponen, yang dapat membantu mengelakkan para peniaga yang tidak perlu.null
apabila tiada kemas kini diperlukan), anda boleh mengelakkan kemas kini keadaan yang tidak perlu.Kesan negatif:
getDerivedStateFromProps
dipanggil, yang boleh membawa kepada overhead pengiraan tambahan, terutama jika logik di dalam kaedah itu kompleks.getDerivedStateFromProps
boleh membawa kepada gelung tak terhingga jika perubahan keadaan mencetuskan kemas kini prop selanjutnya, yang seterusnya mencetuskan lebih banyak kemas kini negeri. Untuk mengurangkan isu -isu prestasi, penting untuk memastikan logik di dalam getDerivedStateFromProps
sebagai mudah dan cekap yang mungkin dan untuk memastikan bahawa kemas kini negeri hanya dibuat apabila perlu.
Apabila menggunakan getDerivedStateFromProps
, terdapat beberapa perangkap biasa untuk mengetahui dan mengelakkan:
getDerivedStateFromProps
hanya mengemas kini menyatakan apabila perlu.getDerivedStateFromProps
untuk setiap perubahan prop. Ia hanya boleh digunakan untuk senario di mana negara perlu diperolehi daripada alat peraga. Untuk kemas kini negeri lain, gunakan kaedah lain seperti pengendali acara atau kaedah kitaran hayat lain.getDerivedStateFromProps
untuk persediaan keadaan awal. Pembina adalah tempat yang lebih baik untuk menetapkan keadaan awal. Gunakan getDerivedStateFromProps
untuk mengemas kini negeri berdasarkan perubahan prop selepas penampilan awal.prevState
: Sentiasa bandingkan nextProps
dengan prevState
untuk memastikan anda tidak mengemas kini keadaan tidak perlu. Ini dapat membantu mencegah penahan semula yang tidak perlu dan meningkatkan prestasi.getDerivedStateFromProps
mudah. Logik kompleks boleh membawa kepada isu -isu prestasi dan menjadikan komponen lebih sukar untuk difahami dan dikekalkan.Inilah contoh perangkap yang sama untuk mengelakkan:
<code class="jsx">class BadExample extends React.Component { static getDerivedStateFromProps(nextProps, prevState) { // This will cause an infinite loop because it's not comparing nextProps with prevState return { someProp: nextProps.someProp }; } render() { return <div>{this.state.someProp}</div>; } }</code>
Dengan menyedari perangkap -perangkap ini dan melaksanakan getDerivedStateFromProps
dengan teliti, anda dapat menggunakan kaedah kitaran hayat ini dengan berkesan untuk menguruskan negara berdasarkan perubahan prop dalam komponen React anda.
Atas ialah kandungan terperinci Apakah getDerivedStateFroprops ()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!