Hier ist die Grundidee ...React State Array aktualisiert/rendert das gesamte Array, gibt es einen Workaround?
constructor(props) {
super(props);
this.state = {
children: [{id:1},{id:2}], // HERE ARE THE TWO OBJECTS
style: {top: 0}
};
}
die wir nun sagen, dass ich eine dieser beiden Objekte aktualisieren, aber die Objekte sind mit einer Reihe von Komponenten abgebildet.
<div className="thread">
{this.state.children.map((child) =>
<Post
key={child.id}
id={child.id}
/>
)}
</div>
Nun ... wenn ich eines dieser Objekte aktualisieren ...
changeID (id, newID) { // this is a different function, just an example
let temp = this.state.children;
for (let i = 0; i < temp.length; i++) {
if (temp[i].id === id) {
temp[i].id = newID; // <- update this
}
}
this.setState({
children: temp // <- plug temp[] back as the updated state
});
}
Ich werfe den neuen Zustand zurück in, aber es aktualisiert jedem der abgebildeten Objekte.
// on one change to one element
id 1 POST UPDATED
id 2 POST UPDATED
1) Ist es erneut rendern EVERY Komponente (in dem zugeordneten Array) oder ist es intelligent genug, um zu sagen, dass die Zustandswerte als Requisiten auf dem zugeordneten Komponente übergeben gleich sind?
2) Ist es unglaublich teuer in der Verarbeitungsleistung, wenn dieses Array wesentlich länger ist?
3) Wenn ja, wie kann ich das besser machen? Konstruktive Kritik wird geschätzt.
Vielen Dank!
, wie Sie wissen, dass es das jedes Objekt aktualisiert? –
@MayankShukla * componentDidUpdate() {console.log ("AKTUALISIERT");} * –