Sollten Sie jemals this.setState () verwenden, wenn Sie Redux verwenden?


111

Sollten Sie jemals verwenden, this.setState()wenn Sie Redux verwenden? Oder sollten Sie immer Aktionen auslösen und sich auf Requisiten verlassen?


1
Es ist nichts Falsches daran, einige Komponenten mit Status zu haben.
Zerkms

3
Das hängt ganz davon ab, wo der Staat benutzt wird. Stellen Sie sich Redux-Stores als global vor. Alles, was nicht global sein muss, kann für eine Komponente und ihre untergeordneten Elemente privat bleiben.
Azium

Antworten:


139

Eine setStateeindeutige Verwendung von wäre für UI-Komponenten, die einen lokalen Anzeigestatus haben, aber für die globale Anwendung nicht relevant sind. Beispielsweise muss sich ein Boolescher Wert, der angibt, ob ein bestimmtes Dropdown-Menü aktiv angezeigt wird, nicht im globalen Status befinden, sodass er bequemer über den Status der Menükomponente gesteuert werden kann.

Andere Beispiele könnten den Reduzierungs- / Erweiterungszustand von Linien in einer Akkordeonanzeige einer Hierarchie umfassen. Oder möglicherweise die aktuell ausgewählte Registerkarte in der Registerkartennavigation. In beiden Beispielen können Sie sich jedoch weiterhin dafür entscheiden, den UI-Status global zu behandeln. Dies wäre beispielsweise erforderlich, wenn Sie den Erweiterungs- / Reduzierungsstatus im Browserspeicher beibehalten möchten, damit er durch Seitenaktualisierung erhalten bleibt.

In der Praxis ist es normalerweise am einfachsten, solche UI-Elemente mit lokalem Status zu implementieren und sie nach Bedarf in einen globalen Status umzuwandeln.


23
Um dies zu verfolgen, betont der relevante Redux FAQ-Eintrag, dass die Verwendung von setStatevöllig in Ordnung ist : redux.js.org/docs/faq/…
markerikson

2
Wenn Sie serverseitiges Rendering übergeben oder verwenden
möchten,

Der FAQ-Link zu Redux wurde auf redux.js.org/faq/organizing-state
AnandShanbhag
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.