Leistung beim Markieren eines Elements in der Liste mit React

8

Ich habe eine große Liste, sagen wir 3k-Mitglieder. Ich habe eine Komponente, die diese Liste und eine Komponente für jeden Listeneintrag rendert. In der äußeren Komponente haben wir einen Code wie folgt:

%Vor%

Und dann in unserem JSX platzieren wir die Liste:

%Vor%

Hier ist der Haken: Ich möchte den Benutzer anzeigen, wenn er auf einen Artikel klickt, für den der Artikel ausgewählt wurde. In meiner ListItem -Komponente habe ich also Code, der, abhängig davon, ob der einzelne Artikel eine selected -Eigenschaft hat oder nicht, sich selbst hervorhebt. Wie kann ich verhindern, dass React die gesamte Liste neu rendert, wenn sich nur die ausgewählte Eigenschaft für ein einzelnes Element ändert? Ich bin mir sicher, dass ich meinen Code irgendwie umstrukturieren muss, aber ich bin mir nicht sicher, welche Struktur das ist Löse dieses Problem. Gerne alle Fragen zu beantworten und danke im Voraus!

Hinweise:

  • Ich sage nicht, dass das Rendern von 3k-Elementen in einer Liste gut ist, glauben Sie einfach Dies sollte im Prinzip möglich sein, um zu reagieren.
  • Die Liste wird nicht buchstäblich im eigentlichen Dom neu gerendert, aber das virtuelle Dom erledigt die Arbeit, alles zu vergleichen, und das braucht viel Zeit.
matty-d 23.10.2015, 15:44
quelle

1 Antwort

5

Okay, ich habe es herausgefunden. Die erfolgreiche Implementierung von shouldComponentUpdate für jeden einzelnen Artikel bringt eine massive Leistungssteigerung. Ich hatte dies aus einem einfachen Grund versäumt.

%Vor%

Wie auch immer ... Ich tat dies auf meiner Erklärung zu jedem Punkt:

%Vor%

Was bedeutet, dass this.props.onClick === nextProps.onClick immer false zurückgibt, so dass sich jedes einzelne Element immer als neu gerendert deklarieren würde. Nach der Implementierung eines benutzerdefinierten Checks ist es jetzt extrem schnell!

    
matty-d 23.10.2015 16:45
quelle