Saya memiliki masalah di mana perenderan ulang keadaan menyebabkan masalah ui dan disarankan untuk hanya memperbarui nilai tertentu di dalam peredam saya untuk mengurangi jumlah perenderan ulang pada halaman.
ini adalah contoh negara saya
{
name: "some name",
subtitle: "some subtitle",
contents: [
{title: "some title", text: "some text"},
{title: "some other title", text: "some other text"}
]
}
dan saya sedang memperbaruinya seperti ini
case 'SOME_ACTION':
return { ...state, contents: action.payload }
di mana action.payload
seluruh larik berisi nilai baru. Tapi sekarang saya sebenarnya hanya perlu memperbarui teks dari item kedua dalam larik konten, dan sesuatu seperti ini tidak berfungsi
case 'SOME_ACTION':
return { ...state, contents[1].text: action.payload }
di mana action.payload
sekarang ada teks yang saya butuhkan untuk pembaruan.
javascript
reactjs
redux
Ilja
sumber
sumber
kolodny/immutability-helper
, jadi sekarangyarn add immutability-helper
danimport update from 'immutability-helper';
Anda bisa menggunakan
map
. Berikut ini contoh penerapannya:sumber
Anda tidak harus melakukan semuanya dalam satu baris:
sumber
Sangat terlambat untuk pesta tetapi ini adalah solusi umum yang bekerja dengan setiap nilai indeks.
Anda membuat dan menyebarkan array baru dari array lama hingga yang
index
ingin Anda ubah.Tambahkan data yang Anda inginkan.
Buat dan sebarkan array baru dari yang
index
ingin Anda ubah ke akhir arrayMemperbarui:
Saya telah membuat modul kecil untuk menyederhanakan kode, jadi Anda hanya perlu memanggil suatu fungsi:
Untuk contoh lainnya, lihat repositori
fungsi tanda tangan:
sumber
Saya percaya ketika Anda membutuhkan operasi semacam ini di negara bagian Redux Anda , operator penyebaran adalah teman Anda dan prinsip ini berlaku untuk semua anak.
Anggaplah ini negara bagian Anda:
Dan Anda ingin menambahkan 3 poin ke Ravenclaw
Dengan menggunakan operator penyebaran, Anda hanya dapat memperbarui status baru dengan membiarkan yang lainnya tetap utuh.
Contoh yang diambil dari artikel luar biasa ini , Anda dapat menemukan hampir setiap opsi yang memungkinkan dengan contoh yang bagus.
sumber
Dalam kasus saya, saya melakukan sesuatu seperti ini, berdasarkan jawaban Luis:
sumber
Beginilah cara saya melakukannya untuk salah satu proyek saya:
sumber
Saya khawatir bahwa menggunakan
map()
metode array mungkin mahal karena seluruh array akan diiterasi. Sebagai gantinya, saya menggabungkan array baru yang terdiri dari tiga bagian:Berikut contoh yang saya gunakan dalam kode saya (NgRx, namun machanismenya sama untuk implementasi Redux lainnya):
sumber