我有一个称为对象this.state.devices
数组的状态device
。
说我有一个功能
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});
}
}
这里的问题是每次this.updateSomething
调用时,都会更新整个数组,因此整个 DOM 都会重新渲染。在我的情况下,这会导致浏览器冻结,因为我几乎每秒都在调用这个函数,并且有很多device
对象。然而,在每次通话中,实际上只有一两个这些设备得到更新。
我有哪些选择?
编辑
在我的确切情况下, adevice
是一个定义如下的对象:
function Device(device) {
this.id = device.id;
// And other properties included
}
所以数组中的每一项state.devices
都是 this 的一个特定时刻Device
,即我有的地方:
addDevice: function (device) {
var newDevice = new Device(device);
this.setState({devices: this.state.devices.push(device)});
}
我更新的答案如何updateSomething
,我有:
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);
}
}
现在的问题是我收到一个错误,提示无法读取 的未定义值id
,它来自function Device()
; 似乎new Device()
正在调用一个 new并且device
没有传递给它。