Pytanie:Redux: organizowanie pojemniki, elementy, działania i reduktory
Co jest najbardziej utrzymaniu i zalecane najlepsze praktyki organizowania kontenery, komponenty, działania i reduktory w dużej React/Redux aplikacji ?
Moja opinia:
Obecne trendy wydają się organizować zabezpieczeń Redux (działania, reduktory, sagi ...) wokół związanego komponentu kontenera. na przykład
/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
Działa to świetnie! Chociaż wydaje się, że istnieje kilka problemów z tym projektem.
Zagadnienia:
Kiedy trzeba przejść actions
, selectors
lub sagas
z innego pojemnika wydaje anty-wzór. Załóżmy, że mamy globalny kontener /App
z reduktorem/stanem, który przechowuje informacje, których używamy w całej aplikacji, takie jak kategorie i wyliczenia. Opierając się na powyższym przykładzie, z drzewa państwowej:
{
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,
}
},
}
Jeśli chcemy użyć selector
z pojemnika /App
w naszym /BookList
pojemnika musimy albo odtworzyć go w /BookList/selectors.js
(na pewno nie tak?) Lub zaimportować od /App/selectors
(czy zawsze będzie to WYBÓR tego samego selektora ...? nie.). Obie te cechy wydają mi się nieoptymalne.
Podstawowym przykładem tego przypadku jest Uwierzytelnianie (ah ... auth, z którego lubimy cię nienawidzić), ponieważ jest to popularny "efekt uboczny". Często potrzebujemy uzyskać dostęp do sag, akcji i selektorów /Auth
w całej aplikacji. Możemy mieć pojemniki /PasswordRecover
, /PasswordReset
, /Login
, /Signup
.... Właściwie w naszej aplikacji nasz /Auth
contianer ma rzeczywisty komponent w ogóle!
/src
/contianers
/Auth
actions.js
constants.js
reducer.js
selectors.js
sagas.js
Po prostu zawiera wszystkie zabezpieczenia Redux dla różnych i często niezwiązanych z nimi kontenerów auth, o których mowa powyżej.
Jestem ciekawa, z aktualną strukturą, w jaki sposób używasz swojego selektora? Powiedzmy, że komponent używa funkcji selektora "BookList", czy możesz pokazać mi swoją funkcję 'mapStateToProps'? przechodzisz przez "stan"? lub 'state.booklist' – xiaofan2406