Ich denke, ich verwende nicht so, wie ich soll.Sub-Komponente nicht korrekt in React + Flux-Architektur
Ich versuche, die Dinge so viel wie möglich zu vereinfachen, also beschreibe ich kurz das Problem, die Lösungen, die ich gefunden habe und was ich an ihnen nicht mag.
Problem Ich habe einige Flüsse in meiner App. Stellen Sie sich eine mehrstufige Übung vor, in der jeder Schritt eine Liste mit Karten enthält. Die Karten und andere Daten von einem Schritt zum anderen sind unterschiedlich, also grundsätzlich auf jedem Schritt habe ich die gleiche Komponente, aber mit anderen Daten. Jeder Schritt erhält eine cardsObject
in getDefaultProps
. In getInitialState
wandle ich es in ein Array um es einfacher zu machen. Wenn Sie eine neue Karte hinzufügen, sendet die die neuen Daten an die Store
. Es sendet eine Änderung, die View
Updates, es übergibt die neuen Karten als props
, aber sie nicht wieder in den Zustand bekommen, so dass die Komponente mit den gleichen Karten neu rendert.
ein Diagramm zum besseren Verständnis Anbringen (die linken und rechten Spalten die gleiche Gruppe von Komponenten sind. Ich habe separat setzt sie nur die Strömung besser zu verstehen)
Lösungen Ich habe gefunden
1. Die ersten Dinge, die in den Sinn kamen, ist, dass die Komponente nicht ordnungsgemäß aktualisiert wird. Also habe ich einen key
dafür gesetzt, einen eindeutigen Schlüssel jedes Mal erzeugend. Dies bedeutet, dass beim Passieren von 4 Karten es wieder in die getDefaultProps
und getInitialState
geht und die Komponenten richtig rendert.
Die großen Nachteil von diesem ist, dass es alle Komponente (die Liste der Karten von ihm, die verschiedenen Texte, die es hat) wieder rendert. Ich hoffte, dass es es nur im Gedächtnis wiedergibt, aber es gibt auch das DOM wieder. Es ist also nicht performant. Ich lösche grundsätzlich alles und erstelle es bei jedem Update neu.
2. Eine andere Lösung bestand darin, für jeden Schritt den gleichen Schlüssel zu generieren (Schritt 1 erhält Schlüssel 1 usw.). Um die neuen Karten zu bekommen, musste ich getInitialState
loswerden und in render
mit den Karten direkt von props
arbeiten. Dies ist der Nachteil dieser Methode. Es bedeutet, dass ich nicht mit Dingen aus dem Staat arbeiten kann, weil nur die Requisiten sich ändern.
Also brauche ich eine Anleitung. Wie finden Sie die 2 Lösungen? Kann ich den Zustand bei Erhalt der neuen Requisiten irgendwie aktualisieren? ComponentWillUpdate
wird ausgelöst, und ich habe die neuen Requisiten dort. Wie kann ich sie wieder in den Staat injizieren? Ich habe versucht setState
in componentWillUpdate
und ich habe ein nicht reagierendes Skript. Ich denke, ich brauche hier eine bessere Lösung.
Vielen Dank im Voraus. Ich habe keinen Code gepostet, da es einfach ist, nichts besonderes.
Auf den ersten Blick scheint Ihre zweite Lösung die richtige zu sein - das Duplizieren von Daten aus Ihrem Geschäft in Ihren Komponentenstatus verursacht oft Reibung, da Dinge sehr leicht aus der Synchronisation geraten (siehe https://facebook.github.io) /react/tips/props-in-getInitialState-as-anti-pattern.html). Kannst du klarstellen, was du meinst, wenn du sagst: "Es bedeutet, dass ich nicht mit Dingen aus dem Staat arbeiten kann, weil sich nur die Requisiten verändern?" –