Caching Requisiten in getDefaultProps ein Anti-Muster in React?

8

Ich schreibe eine komplexe App und benutze Cortex als mein zentrales Modell. Die Philosophie mit Cortex ist, dass es Ihre Daten umhüllt und die Daten verändert, ruft eine komplette Neu-Render von der Wurzel. Dies funktioniert besonders, wenn Sie nicht hierarchische Ansichten haben, die den Status ändern und sich gegenseitig beeinflussen.

Das Problem, dem ich gegenüberstehe, besteht darin, Zustände / Requisiten beim Rendern beizubehalten. Zum Beispiel habe ich eine bestimmte Hierarchie, die so lautet:

%Vor%

Die EditorCard benötigt die JavaScript-Instanz von Editor , um Änderungen an der Editor beim Klicken auf PublishButton vorzunehmen (Ich verwende eine externe Bibliothek innerhalb von Editor , die Methoden zur Bearbeitung verfügbar macht). Daher setzt die Editor auf ComponentDidMount die Instanz als prop auf der EditorCard , indem sie eine Funktion aufruft, die an sie übergeben wurde.

Mein Problem ist, dass wenn ich auf PublishButton klicke, ich den Wert des Cortex-Objekts ändere, was zu einem erneuten Rendering vom Stamm führt und die Props für Editor verlieren (da die Komponente bereits eingehängt ist ComponentDidMount wird nicht erneut aufgerufen).

Die Art und Weise, wie ich mich um dieses Problem gekümmert habe, ist das Zwischenspeichern von getDefaultProps .

Innerhalb von EditorCard sind meine Standardrequisiten:

%Vor%

Und speichert die Editorinstanz als this.props.cachedData.editor = editorInstance

Dies speichert Requisiten über mehrere Rendern.

Soll getDefaultProps caching verwendet werden? Wenn ich Requisiten über mehrere Re-Render-Objekte spare, bremse ich mit diesem Hack einige der Kernreaktionsregeln? Könnten Sie eine bessere Struktur vorschlagen?

    
shilpanb 10.04.2014, 06:13
quelle

1 Antwort

6

Nein, getDefaultProps ist, was es bedeutet zu sein: die Standard-Requisiten zu bekommen, falls der Besitzer diese nicht an Sie weitergegeben hat. Man könnte sagen, es ist eine Abkürzung für a = this.props.bla || 'hello'; .

Wenn ich Ihre Frage richtig verstehe, sehe ich drei Möglichkeiten, es zu lösen.

  1. Speichern Sie das stattdessen in Ihrem Status. Requisiten werden vom Elternteil weitergegeben und sollen im Inneren des Kindes gelesen werden, zumindest in Vanille React.

  2. Anstatt diese Requisite Logik in componentDidMount zu setzen, warum nicht in componentDidUpdate einfügen?

  3. Mit
  4. ref können Sie die Instanz abrufen und ihre Methoden aufrufen direkt.

chenglou 10.04.2014 22:43
quelle

Tags und Links