Saya telah melalui definisi keduanya seperti:
Fungsi murni adalah fungsi yang tidak berusaha mengubah inputnya, dan selalu mengembalikan hasil yang sama untuk input yang sama.
Contoh
function sum(a, b) {
return a + b;
}
Dan fungsi yang tidak murni adalah yang mengubah inputnya sendiri.
Contoh
function withdraw(account, amount) {
account.total -= amount;
}
Cuplikan definisi dan kode diambil dari dokumen resmi ReactJs .
Sekarang, bisakah seseorang memberi tahu saya, bagaimana saya bisa membuat beberapa kesalahan dalam React / Redux , untuk menggunakan fungsi tidak murni di mana fungsi murni diperlukan?
javascript
reactjs
redux
MuhammadUmar Farooq
sumber
sumber
window.getElementById
dll sehingga menjalankan fungsi yang sama dengan parameter yang sama dapat memiliki hasil yang berbeda tergantung pada efek sampingnya. Di situlah redux akan gagal.Jawaban:
Bereaksi dan
Redux
keduanya membutuhkan fungsi murni ditambah dengan imutabilitas untuk berjalan dengan cara yang dapat diprediksi.Jika Anda tidak mengikuti dua hal ini, aplikasi Anda akan memiliki bug, yang paling umum
React/Redux
tidak dapat melacak perubahan dan tidak dapat membuat ulang saatstate/prop
perubahan Anda .Dalam hal Bereaksi, pertimbangkan contoh berikut:
Negara dipegang oleh objek negara yang hanya menambahkan properti. Aplikasi ini membuat properti aplikasi. Seharusnya tidak selalu membuat negara ketika sesuatu terjadi tetapi harus memeriksa apakah perubahan terjadi pada objek negara.
Seperti itu, kita memiliki fungsi efek,
pure function
yang kita gunakan untuk memengaruhi kondisi kita. Anda melihat bahwa ia mengembalikan status baru ketika status diubah dan mengembalikan status yang sama ketika tidak diperlukan modifikasi.Kami juga memiliki
shouldUpdate
fungsi yang memeriksa menggunakan operator === apakah kondisi lama dan kondisi baru sama.Untuk membuat kesalahan dalam hal Bereaksi, Anda sebenarnya dapat melakukan hal berikut:
Anda juga dapat membuat kesalahan dengan mengatur negara secara langsung dan tidak menggunakan
effects
fungsi.Hal di atas tidak boleh dilakukan dan hanya
effects
fungsi yang harus digunakan untuk memperbarui status.Dalam hal Bereaksi, kami menyebutnya
effects
sebagaisetState
.Untuk Redux:
combineReducers
Utilitas Redux memeriksa perubahan referensi.connect
Metode React-Redux menghasilkan komponen yang memeriksa perubahan referensi untuk kondisi root dan nilai kembali darimapState
fungsi untuk melihat apakah komponen yang dibungkus benar-benar perlu di-render ulang.pure functions
tanpa efek samping sehingga Anda dapat melompat dengan benar di antara berbagai kondisi.Anda dapat dengan mudah melanggar ketiga di atas dengan menggunakan fungsi tidak murni sebagai peredam.
Berikut ini diambil langsung dari redux docs:
Ini disebut peredam karena itu jenis fungsi yang akan Anda masuki
Array.prototype.reduce(reducer, ?initialValue)
.Sangat penting bahwa peredam tetap murni. Hal yang tidak boleh Anda lakukan di dalam peredam:
Dengan argumen yang sama, harus menghitung status berikutnya dan mengembalikannya. Tidak ada kejutan. Tidak ada efek samping. Tidak ada panggilan API. Tidak ada mutasi. Hanya perhitungan.
sumber
Sederhananya negara tidak dapat dimutasi. Sebuah instance baru dari negara harus dikembalikan setiap kali ada perubahan
Kode ini tidak benar:
Kode ini ketika ditulis sebagai fungsi murni di bawah, Ini mengembalikan instance baru dari array yang tidak mengubah array itu sendiri. Inilah alasan Anda harus menggunakan perpustakaan seperti immer untuk menangani ketidakberdayaan
sumber
Anda dapat membuat fungsi murni tidak murni dengan menambahkan panggilan API atau menulis kode yang menghasilkan efek samping.
Fungsi murni harus selalu tepat dan jelas, dan seharusnya tidak mengharuskan Anda untuk merujuk 3 atau 4 fungsi lainnya untuk memahami apa yang terjadi.
Dalam kasus React / Redux
Ini seharusnya tidak dilakukan . Segala sesuatu yang dibutuhkan fungsi koneksi atau fungsi peredam harus disediakan melalui argumen atau dituliskan dalam fungsinya. Seharusnya tidak pernah dari luar.
sumber