2017-05-08 5 views
1

Ich bin neu zu Reagieren und ich versuche, ein Data Grid zu machen, es funktioniert jetzt, aber ich fühle mich wie ich es falsch mache, hier sind die Details:Korrekter Weg zum Anheben Zustand in React

Jede Zeile hat mehrere Eingaben (Text, Auswahl, Schaltfläche), und wir haben die Möglichkeit zu löschen, Zeilen einzufügen.

Jetzt habe ich eine GridComponent, die alle Daten als ein Array von Objekt enthalten. Auf macht es, das Objekt zu RowComponent mit einem Griff passieren zu rufen, wenn die Eingabe ändert:

this.state.data.map((rowdata, index) => 
    <RowComponent key={rowdata.id} rowdata={rowdata} dataindex={index} handleChange={this.handleChange} />) 

Das Problem ist, wenn RowComponent handleChange nennen, die GridComponent die rowIndex verwendet das Objekt zu aktualisieren. Aber es ist langsam und hat ein wenig Verzögerung beim Tippen.

Um dieses Problem zu lösen, deklariere ich dann einen Zustand in RowComponent, um die Daten während der Eingabe zu steuern und nur handleChange on onBlur-Ereignis aufrufen und es funktioniert sehr gut. Aber jetzt habe ich 2 Zustand in der Grid and Row, ist es der richtige Weg zu tun?

+0

Beide Ansätze sollten in Ordnung sein. Wie groß sind die Daten, über die wir sprechen? Ändert sich die ID aus irgendeinem Grund? –

+0

Sie verwenden nichts wie Flussmittel oder Redox? –

+0

@HoriaComan: Es wird nicht zu groß nur neugierig, weil der erste Ansatz langsam ist und der zweite ist die Daten duplizieren. Die ID ist nur für Schlüssel – Tubc

Antwort

1

Haben Sie profiled Ihren Code, um die langsamsten Stücke zu identifizieren?

Sie scheinen dies in einer akzeptablen Weise ohne Verwendung von Flussmittel getan zu haben. Dies sollte ein Problem mit vielen häufigen und vermeidbaren Renderings sein. Meistens eine Frage von Schecks. Sofern Sie nicht fix diese, Externalisierungsstatus wird nicht helfen (außer für Bibliotheken, die ForceUpdate-basierte Ansätze verwenden, wie MobX).

Auch für Eingänge sollten Sie lieber debounced Event-Handler, oder mit einem Schatten internen Zustand (wie Sie getan haben), über alle Änderungen sofort zu propagieren.

+1

Vielen Dank, der Vorschlag, den Code zu profilieren und sugatComponentUpdate zu verwenden, war sehr hilfreich. Ich verstehe, reagiere jetzt mehr, schätze deine Antwort wirklich – Tubc

Verwandte Themen