Jawaban @ jpdelatorre sangat bagus dalam menyoroti alasan umum mengapa komponen Bereaksi dapat di-render ulang.
Saya hanya ingin menyelam sedikit lebih dalam ke satu contoh: ketika alat peraga berubah . Pemecahan masalah apa yang menyebabkan komponen Bereaksi untuk di-render adalah masalah yang umum, dan dalam pengalaman saya banyak kali melacak masalah ini melibatkan menentukan alat peraga mana yang berubah .
Bereaksi komponen yang di-render setiap kali mereka menerima alat peraga baru. Mereka dapat menerima alat peraga baru seperti:
<MyComponent prop1={currentPosition} prop2={myVariable} />
atau jika MyComponent
terhubung ke toko redux:
function mapStateToProps (state) {
return {
prop3: state.data.get('savedName'),
prop4: state.data.get('userCount')
}
}
Kapan saja nilai dari prop1
, prop2
, prop3
, atau prop4
perubahan MyComponent
akan kembali membuat. Dengan 4 alat peraga, tidak terlalu sulit untuk melacak alat peraga mana yang berubah dengan meletakkan console.log(this.props)
pada awal render
blok itu. Namun dengan komponen yang lebih rumit dan lebih banyak alat peraga metode ini tidak dapat dipertahankan.
Berikut ini adalah pendekatan yang berguna (menggunakan lodash untuk kenyamanan) untuk menentukan perubahan prop mana yang menyebabkan komponen dirender ulang:
componentWillReceiveProps (nextProps) {
const changedProps = _.reduce(this.props, function (result, value, key) {
return _.isEqual(value, nextProps[key])
? result
: result.concat(key)
}, [])
console.log('changedProps: ', changedProps)
}
Menambahkan potongan ini ke komponen Anda dapat membantu mengungkap pelakunya yang menyebabkan perenderan ulang yang dipertanyakan, dan sering kali ini membantu menjelaskan data yang tidak perlu yang disalurkan ke komponen.
shouldComponentUpdate
untuk menonaktifkan pembaruan komponen otomatis dan kemudian memulai jejak Anda dari sana. Informasi lebih lanjut dapat ditemukan di sini: facebook.github.io/react/docs/optimizing-performance.html