Ich habe einen Zustand namens this.state.devices
, die ein Array von device
Objekte ist.ReactJS Aktualisieren eines einzelnen Objekts in einem Statusarray
sagen, dass ich eine Funktion haben hier
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});
}
}
Problem, dass this.updateSomething
ist jedes Mal aufgerufen wird, wird das gesamte Array aktualisiert wird, und so die gesamte DOM neu gerendert wird. In meiner Situation verursacht dies, dass der Browser einfriert, da ich diese Funktion ziemlich jede Sekunde anrufe, und es gibt viele device
Objekte. Bei jedem Anruf werden jedoch nur ein oder zwei dieser Geräte aktualisiert.
Was sind meine Optionen?
EDIT
In meine genaue Situation, ein device
ist ein Objekt, das wie folgt definiert ist:
function Device(device) {
this.id = device.id;
// And other properties included
}
So ist jedes Element im Array von state.devices
einem bestimmten Zeitpunkt dieser Device
ist, dh irgendwo hätte ich:
Mein updat ed wie auf updateSomething
beantworten, ich habe:
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);
}
}
Problem ist jetzt, dass ich einen Fehler, der den nicht definierten Wert von id
nicht lesen, sagt kann, und aus dem function Device()
kommt; es scheint, dass ein neuer new Device()
aufgerufen wird und der device
nicht an ihn übergeben wird.
Es gibt Möglichkeiten, diese Post https Rendering jedes Mal wie shouldComponentUpdate Besuche zu verhindern: // www.codementor.io/reactjs/tutorial/understanding-react-js-rendering. Darüber hinaus sparen Sie Ausführungszeit, wenn Sie einen Weg finden, den Index mit dem Gerät zu behalten, anstatt ihn jedes Mal abzubilden und zu suchen. Sie ändern auch technisch das Array im Zustand, der als unveränderlich behandelt werden sollte, schlagen Sie vor, indem Sie .slice() verwenden, wie in http://stackoverflow.com/questions/26505064/react-js-what-is-the-best-way -ein-Wert-zu-einem-Array-in-state hinzufügen –