Kommunikation zwischen zwei React-Formularkomponenten mit Redux

8

Angenommen, Sie haben ein Formular wie unten, um eine neue Person hinzuzufügen:

Wenn Sie in diesem Beispiel ein Land aus der Auswahlliste auswählen, wird das Element city select mit Optionen für das ausgewählte Land gefüllt. Diese Formularseite ( PersonCreationForm ) besteht aus folgenden Komponenten:

  • CountrySelectionForm
  • CitySelectionForm

Hier ist die Frage: Wie soll ich die Auswahl von CountrySelectionForm component auf CitySelectionForm component? Ich habe ein paar Optionen im Hinterkopf, aber ich bin mir nicht sicher, was die perverse Art wäre, damit in der Redux-Welt umzugehen:

  • Innerhalb der PersonCreationForm -Komponente, indem Sie einfach den onCountrySelected -Stützpunkt von CountrySelectionForm anhängen und das Ergebnis über seine CitySelectionForm -Stütze an country übergeben. Es ist nicht nötig, Redux für diese Kommunikation zu verwenden. Wenn Sie jedoch die Property country ändern, wird eine Änderung in CitySelectionForm ausgelöst, um Städte basierend auf dem ausgewählten Land von Redux store zu erhalten.
  • Bei der Länderauswahl löst PersonCreationForm component die Aktion aus, die angibt, welches Land ausgewählt wurde. Auf dieser Basis wird PersonCreationForm benachrichtigt und übergibt das Ergebnis an CitySelectionForm bis country prop. Dies löst eine Änderung in CitySelectionForm aus, um Städte basierend auf dem ausgewählten Land von Redux store zu erhalten.
  • Bei der Länderauswahl löst PersonCreationForm component die Aktion aus, die angibt, welches Land ausgewählt wurde. Auf dieser Basis wird CitySelectionForm benachrichtigt. Dies löst eine Änderung in CitySelectionForm aus, um Städte basierend auf dem ausgewählten Land von Redux store zu erhalten.
tugberk 22.07.2016, 12:01
quelle

4 Antworten

4

Ich würde Ihnen wärmstens empfehlen, redux-form für solche Situationen zu verwenden. In Ihrem Fall wäre es etwa so:

%Vor%

Damit dies funktioniert, sollten Sie die Props "value" und "onChange" in den Komponenten ContrySelectInput und CitySelectInput verarbeiten. Wie bei normalen Eingaben.

Redux-Form-Modul wird Ihr Leben mit den Formen erheblich vereinfachen. Sie können so etwas mit einem sauberen Redux tun (Option 1 in Ihrer Liste). Und es wird immer noch stimmen.

    
Eugene Zinin 22.07.2016, 12:21
quelle
1

Es gibt einen möglichen Weg, um zu bestimmen, welche Option Sie verwenden können:

Wenn Sie KEINE Daten für die App freigeben möchten und Komponenten dasselbe Elternelement haben, dann , können Sie dies mit dem lokalen Status tun. Daher spart es Ihre Zeit, weil Sie keine Aktionen, Reducer-Codes usw. schreiben müssen und keine Abstraktionen benötigen.

Wenn Sie zum Teilen der Daten in der App benötigen, dann können Sie redux stuff

verwenden     
Kokovin Vladislav 22.07.2016 16:57
quelle
0

Ich musste etwas ähnliches mit react-redux und redux-form machen. Sie könnten so etwas tun:

AddUserForm.js:

%Vor%

CountrySelect.js:

%Vor%

CitySelect.js:

%Vor%

actions.js:

Die Funktion updateCities setzt redux state.cities auf ein Array, das folgendermaßen aussieht:

%Vor%     
inostia 29.07.2016 17:34
quelle
0

Sie brauchen Redux für diesen Anwendungsfall nicht. Sie können die Komponente PersonCreationForm als Wrapper mit einem internen Status verwenden.

Die beiden Selects CountrySelectionForm und CitySelectionForm müssen von props einen dedizierten Handler erhalten, der setState() ausführt, wenn sie in Child-Komponenten des 'onSelect' -Ereignisses ausgelöst werden.

Die Komponente CitySelectionForm erhält props den Wert CountrySelectionForm dank des Status, der von der intelligenten Komponente PersonCreationForm verwaltet wird.

    
Romain DSO 29.07.2016 18:00
quelle

Tags und Links