Die Frage:Redux: Organisation von Containern, Komponenten, Aktionen und Reduzierungen
Was ist die wartbar und empfohlene bewährte Methode für die Organisation von Containern, Komponenten, Aktionen und Reduzierungen in einer großen React/Redux Anwendung ?
Meine Meinung:
Aktuelle Trends scheinen redux Kollateralen (Aktionen, Reduzierungen, Sagas ...) zu organisieren, um die zugehörigen Container-Komponente. z.B.
/src
/components
/...
/contianers
/BookList
actions.js
constants.js
reducer.js
selectors.js
sagas.js
index.js
/BookSingle
actions.js
constants.js
reducer.js
selectors.js
sagas.js
index.js
app.js
routes.js
Das funktioniert super! Obwohl es mit diesem Design ein paar Probleme zu geben scheint.
Die Probleme:
Wenn wir actions
zugreifen müssen, selectors
oder sagas
aus einem anderen Behälter, den er ein Anti-Muster scheint. Nehmen wir an, wir haben einen globalen /App
Container mit einem Reducer/Status, in dem Informationen gespeichert werden, die wir über die gesamte App verwenden, z. B. Kategorien und Aufzählungen. Im Anschluss an dem obigen Beispiel mit einem Zustand Baum:
{
app: {
taxonomies: {
genres: [genre, genre, genre],
year: [year, year, year],
subject: [subject,subject,subject],
}
}
books: {
entities: {
books: [book, book, book, book],
chapters: [chapter, chapter, chapter],
authors: [author,author,author],
}
},
book: {
entities: {
book: book,
chapters: [chapter, chapter, chapter],
author: author,
}
},
}
Wenn wir ein selector
vom /App
Behälter in unserem /BookList
Behälter müssen wir nutzen wollen entweder neu in /BookList/selectors.js
(sicher falsch?) OR importieren von /App/selectors
(wird es immer der GENAU gleiche Selektor ..? nein.). Beide Appraachen scheinen mir suboptimal zu sein.
Das Paradebeispiel für diesen Anwendungsfall ist Authentifizierung (ah ... Auth wir lieben dich zu hassen), wie es ist ein gemeinsames "Nebeneffekt" -Modell VERY. Wir müssen oft über die App auf /Auth
Sagas, Aktionen und Selektoren zugreifen. Wir haben die Behälter /PasswordRecover
, /PasswordReset
, /Login
, /Signup
.... Eigentlich in unserer App unseres /Auth
Contianer hat keine an allen tatsächlichen Komponenten!
Einfach alle Redux-Kollateralen für die oben erwähnten verschiedenen und oft nicht verwandten Authentifizierungscontainer.
Ich bin neugierig, mit Ihrer aktuellen Struktur, wie verwenden Sie Ihren Selektor? Angenommen, eine Komponente verwendet 'BookList'-Selektorenfunktionen, können Sie mir Ihre' mapStateToProps'-Funktion anzeigen? übergibst du den 'Staat'? oder die 'state.booklist' – xiaofan2406