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 saat state/prop
perubahan Anda .
Dalam hal Bereaksi, pertimbangkan contoh berikut:
let state = {
add: 0,
}
function render() {
//...
}
//pure function
function effects(state,action) {
//following immutability while updating state, not directly mutating the state.
if(action == 'addTen') {
return {...state, add: state.add + 10}
}
return state;
}
function shouldUpdate(s) {
if(s === state){
return false
}
return true
}
state = effects(state, 'addTen')if(shouldUpdate(state)) {
render();
}
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:
function effects(state,action) {
doRandom(); // effects should only be called for updating state.
// Doing any other stuff here would make effects impure.
if(action == 'addTen') {
return {...state, add: state.add + 10}
}
return state;
}
Anda juga dapat membuat kesalahan dengan mengatur negara secara langsung dan tidak menggunakan effects
fungsi.
function doMistake(newValue) {
this.state = newValue
}
Hal di atas tidak boleh dilakukan dan hanya effects
fungsi yang harus digunakan untuk memperbarui status.
Dalam hal Bereaksi, kami menyebutnya effects
sebagai setState
.
Untuk Redux:
combineReducers
Utilitas Redux memeriksa perubahan referensi.
connect
Metode React-Redux menghasilkan komponen yang memeriksa perubahan referensi untuk kondisi root dan nilai kembali dari mapState
fungsi untuk melihat apakah komponen yang dibungkus benar-benar perlu di-render ulang.
- Debugging perjalanan waktu mengharuskan peredam dilakukan
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:
Mutate its arguments;
Perform side effects like API calls and routing transitions;
Call non-pure functions, e.g. Date.now() or Math.random().
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.
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.