ReactJS Aktualisierung ein einzelnes Objekt im inneren eines Staates array

Ich habe einen Staat namens this.state.devices was ist ein array von device Objekte.

Sagen, dass ich eine Funktion

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 hier ist, dass jedes mal, wenn this.updateSomething aufgerufen wird, wird das gesamte array aktualisiert wird, und so der gesamte DOM wird neu gerendert. In meiner situation, dies bewirkt, dass der browser einfrieren, wie rufe ich diese Funktion ziemlich jeder zweite, und es gibt viele device Objekte. Aber bei jedem Anruf, nur eine oder zwei dieser Geräte, die tatsächlich aktualisiert werden.

Was sind meine Optionen?

BEARBEITEN

Meiner genauen situation, eine device ist ein Objekt, das wie folgt definiert ist:

function Device(device) {
    this.id = device.id;
    //And other properties included
}

Also jedes Element in dem array der state.devices ist ein bestimmter Augenblick dieses Device, also irgendwo hätte ich:

addDevice: function (device) {
    var newDevice = new Device(device);
    this.setState({devices: this.state.devices.push(device)});
}

Meine aktualisierte Antwort, wie auf updateSomething habe ich:

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 die Fehlermeldung nicht Lesen kann, den undefinierten Wert von id, und es kommt aus der function Device(); es scheint, dass eine neue new Device() aufgerufen wird und die device ist nicht auf ihn übergegangen ist.

InformationsquelleAutor Kousha | 2015-08-27
Schreibe einen Kommentar