Pejabat Bereaksi docs menyatakan bahwa " React.PureComponent
's shouldComponentUpdate()
hanya dangkal membandingkan benda-benda", dan menasihati terhadap hal ini jika negara adalah 'dalam'.
Mengingat hal ini, apakah ada alasan mengapa seseorang harus memilih React.PureComponent
ketika membuat komponen Bereaksi?
Pertanyaan :
- Adakah dampak kinerja dalam penggunaan
React.Component
yang dapat kita pertimbangkan untuk berjalanReact.PureComponent
? - Saya duga
shouldComponentUpdate()
dariPureComponent
melakukan hanya perbandingan dangkal. Jika ini masalahnya, tidak bisakah metode tersebut digunakan untuk perbandingan yang lebih dalam? - "Selain itu,
React.PureComponent
'sshouldComponentUpdate()
melompat menopang update untuk seluruh subtree komponen" - Apakah ini berarti bahwa perubahan prop diabaikan?
Pertanyaan muncul dari membaca ke blog media ini , jika itu membantu.
Jawaban:
Perbedaan utama antara
React.PureComponent
danReact.Component
adalahPureComponent
melakukan perbandingan dangkal pada perubahan negara. Ini berarti bahwa ketika membandingkan nilai skalar ia membandingkan nilainya, tetapi ketika membandingkan objek hanya membandingkan referensi. Ini membantu untuk meningkatkan kinerja aplikasi.Anda harus mencari
React.PureComponent
ketika Anda dapat memenuhi salah satu dari kondisi di bawah ini.forceUpdate
saat data berubahJika Anda menggunakan
React.PureComponent
Anda harus memastikan semua komponen anak juga murni.Ya, itu akan meningkatkan kinerja aplikasi Anda (karena perbandingan yang dangkal)
Anda menebaknya dengan benar. Anda dapat menggunakannya jika Anda memenuhi salah satu kondisi yang saya sebutkan di atas.
Ya, perubahan prop akan diabaikan Jika tidak dapat menemukan perbedaan dalam perbandingan yang dangkal.
sumber
It means that when comparing scalar values it compares their values, but when comparing objects it compares only references. It helps to improve the performance of the app.
? Terima kasihState/Props should not have a hierarchy
maaf, bisakah Anda menjelaskan sedikit apa arti hierarki di sini?Component
danPureComponent
memiliki satu perbedaanPureComponent
persis sama denganComponent
kecuali bahwa ia menanganishouldComponentUpdate
metode untuk Anda.Ketika alat peraga atau negara berubah,
PureComponent
akan melakukan perbandingan yang dangkal pada alat peraga dan negara.Component
di sisi lain tidak akan membandingkan alat peraga saat ini dan negara bagian berikutnya di luar kotak. Dengan demikian, komponen akan dirender ulang secara default setiap kalishouldComponentUpdate
dipanggil.Perbandingan Dangkal
Ketika membandingkan alat peraga sebelumnya dan menyatakan ke berikutnya, perbandingan dangkal akan memeriksa bahwa primitif memiliki nilai yang sama (misalnya, 1 sama dengan 1 atau itu benar sama dengan benar) dan bahwa referensi adalah sama antara nilai-nilai javascript yang lebih kompleks seperti objek dan array.
Sumber: https://codeburst.io/when-to-use-component-or-purecomponent-a60cfad01a81
sumber
Perbedaan utama, seperti yang saya lihat, adalah komponen rerender setiap kali rerender induknya, terlepas dari apakah properti dan status komponen telah berubah.
Komponen murni, di sisi lain, tidak akan merender kembali jika induknya merender ulang, kecuali alat peraga komponen murni (atau keadaan) telah berubah.
Sebagai contoh, katakanlah kita memiliki pohon komponen dengan hierarki tiga tingkat: orang tua, anak-anak dan cucu.
Ketika props orang tua diubah sedemikian rupa sehingga props hanya satu anak diubah, maka:
Namun, kadang-kadang, menggunakan komponen murni tidak akan berdampak apa pun. Saya memiliki kasus seperti itu ketika orang tua menerima alat peraga dari toko redux dan perlu melakukan perhitungan yang rumit dari alat peraga anak-anaknya. Orang tua menggunakan flatlist untuk membuat anak-anaknya.
Hasilnya adalah bahwa setiap kali ada perubahan kecil di toko redux, seluruh susunan flatlist dari data anak-anak telah dihitung ulang. Ini berarti bahwa untuk setiap komponen dalam pohon, alat peraga adalah objek baru, bahkan jika nilainya tidak berubah.
Dalam hal ini, komponen murni tidak membantu, dan peningkatan kinerja hanya dapat dicapai dengan menggunakan komponen reguler dan memeriksa pada anak-anak, di shouldComponentUpdate, jika diperlukan rerender.
sumber