Reagieren Neuling: Freigeben von Status über nicht verknüpfte Komponenten

8

Ich bin ein React-Neuling, der versucht, React in eine Rails-Site zu integrieren. Ich habe eine CommentForm -Komponente ganz oben auf der Seite / html und eine Comments -Komponente am Ende derselben Seite. Derzeit werden beide über die Methode " react_component " von React-On-Rails gerendert.

Das Problem ist, dass ich nach dem Senden eines Formulars in CommentForm gerne this.state.comments in der Comments -Komponente ändern möchte. Ich bin mit der Idee vertraut, sicherzustellen, dass der Staat in eine gemeinsame Elternkomponente übergeht, aber derzeit haben diese beiden Komponenten kein gemeinsames Elternteil (oder überhaupt Eltern).

Also, mit dem Haftungsausschluss, den ich gelernt habe Reagieren für alle 2 Tage und bin wahrscheinlich sehr verwirrt, was ist Best Practice für die Überwindung dieser Art von Problem? Optionen wie ich sie sehe:

  • Schreiben Sie die gesamte Schienenansicht als einzelne übergeordnete Komponente mit den beiden Komponenten als untergeordnete Elemente neu. Das hört sich nicht nach Spaß an - es gibt eine Menge HTML, die von vielen Rails-Helfern zwischen den beiden Komponenten auf der Seite generiert wird.
  • Verwenden Sie Redux, um einen Speicher zu erstellen, der von den zwei Komponenten (???)
  • geteilt wird
  • Irgendwie erstellen Sie eine übergeordnete Komponente, während Sie immer noch die beiden anderen Komponenten in separaten Teilen der Seite (?)
  • darstellen
  • Zugriff auf die Statusattribute von Comment innerhalb von CommentForm oder einer freigegebenen Ressource (z. B. window scope), was aus meinem eingeschränkten Verständnis nicht der React Way
  • ist

Ich vermute, das ist ein häufiges Problem, aber ich bin unsicher, was die allgemeine Weisheit ist, es zu beheben. Irgendwelche Ideen geschätzt.

    
PlankTon 17.01.2018, 14:00
quelle

2 Antworten

6

Die erste Option wäre nur den reaktiven Weg (ohne externe Bibliotheken). Wenn dein Projekt nicht so groß ist, könnte es eine Lösung sein.

Die dritte und vierte Option sind definitiv nicht der richtige Weg.

Für das, was Sie gesagt haben, scheint Redux die einfachste Lösung zu sein.

Die Comments -Komponente sollte alle Kommentare in Ihrem globalen Speicher zeichnen und die CommentForm sollte die Kommentare zum Speicher hinzufügen (und wahrscheinlich auch eine AJAX-Anfrage zum Speichern der Serverseite senden).

Dann teilen diese Komponenten das gleiche Provider und haben Zugriff auf den gleichen Store.

Ich würde vorschlagen, dass Sie Dans Kurs

sehen     
Diogo Sgrillo 17.01.2018, 14:22
quelle
2

Redux ist der perfekte Anwendungsfall dafür. Es dauert nicht lange, um es zu implementieren, aber wenn du es noch nie getan hast, brauchst du ein oder zwei Tage, um es in den Griff zu bekommen.

Im Allgemeinen, wenn Ihr Projekt noch mehr wächst, wird es Ihnen viel leichter fallen, einen Staat zu verwalten, als tausend Komponenten mit breiten Zuständen.

Also, wenn du mehr Situationen wie diese haben wirst, oder Situationen, in denen du Requisiten durch mehr als 3 Komponenten zurücklegen musst. Ich würde Redux jetzt implementieren und zukunftssicher sein.

    
Bojan Ivanac 17.01.2018 14:52
quelle