device
nesnelerinin bulunduğu this.state.devices
adı verilen bir durum var. ReactJS durum dizisi içindeki tek bir nesneyi güncelleştirme
updateSomething: function (device) {
var devices = this.state.devices;
var index = devices.map(function(d){
return d.id;
}).indexOf(device.id);
if (index !== -1) {
// do some stuff with device
devices[index] = device;
this.setState({devices:devices});
}
}
Sorun her zaman this.updateSomething
, denir tüm dizi güncellenir ve böylece tüm DOM re-render olur olduğunu bir işlevi olduğunu varsayalım. Benim durumumda, bu, her saniye hemen hemen her saniye bu işlevi çağıran tarayıcının donmasına neden oluyor ve birçok device
nesnesi var. Ancak, her çağrıda, bu cihazların yalnızca bir veya iki tanesi güncel olarak güncellenir.
Seçeneklerim nelerdir? ,
function Device(device) {
this.id = device.id;
// And other properties included
}
Yani state.devices
dizisindeki her öğe bu Device
belirli bir anlık geçerli:
DÜZENLEME benim kesin durumda
, bir device
şöyle tanımlanır bir nesnedir yani bir yere sahip olabilirim:
addDevice: function (device) {
var newDevice = new Device(device);
this.setState({devices: this.state.devices.push(device)});
}
Benim updat
updateSomething: function (device) {
var devices = this.state.devices;
var index = devices.map(function(d){
return d.id;
}).indexOf(device.id);
if (index !== -1) {
// do some stuff with device
var updatedDevices = update(devices[index], {someField: {$set: device.someField}});
this.setState(updatedDevices);
}
}
Sorun şimdi id
ait tanımsız değeri okuyamaz şeklinde bir hata almak olduğunu ve function Device()
geliyor;: ed nasıl updateSomething
üzerine cevap, var Yeni bir new Device()
çağrılıyor ve device
iletilir.
: // www.codementor.io/reactjs/tutorial/understanding-react-js-rendering. Ayrıca, her seferinde haritalama ve arama yapmak yerine endeksi cihazla birlikte tutmanın bir yolunu bulursanız, bazı yürütme sürelerini kaydedeceksiniz. Ayrıca, teknik olarak dizi değişmez olarak ele alınmalıdır, http: //stackoverflow.com/questions/26505064/react-js-what-is-the-best-way adresine göre .slice() kullanılmasını öneririz. -to-add-a-value-to-an-dizi-in-state –