Próbuję zawinąć głowę, jak zmienić stan głęboko zagnieżdżony w redux. To ma sens, aby połączyć te reduktory i zmienić właściwości pierwszego poziomu dla tych elementów. Gdzie nie jestem tak jasne, jak zmienić stan głęboko zagnieżdżonej nieruchomości. Załóżmy, że mam aplikację na zakupy. Poniżej jest mój stan:Redukcje Redux - zmiana stanu głęboko zagnieżdżonego
{
cart: {
items: []
},
account: {
amountLeft: 100,
discounts: {
redeemed: [],
coupons: {
buyOneGetOne: false
}
}
}
}
Gdy użytkownik wchodzi w kodzie, powiedzmy, że można je odkupić „buyOneGetOne” kupon i wartość ta powinna stać się prawdą. Mam reduktor do koszyka i inny na konto. Dla nieruchomości na pierwszym poziomie (jak gdybym był wybić koszyk w pozycji), chciałbym po prostu wykonaj następujące czynności w moim reduktora:
case 'EMPTY_CART':
return Object.assign({}, state, {items: []});
na zmianę buyOneGetOne, jednak wydaje się, że ja najpierw trzeba zrobić Object.assign na kuponach (ponieważ buyOneGetOne został zmodyfikowany), a następnie robi Object.assign na rabatach (ponieważ miałem zmodyfikowane kupony), a następnie ostatecznie emitując akcję, aby reduktor mógł zrobić Object.assign na koncie (ponieważ rabaty teraz zmienione). Wydaje się to jednak bardzo skomplikowane i łatwe do wykonania, co prowadzi do przekonania, że musi istnieć lepszy sposób.
Czy to wszystko źle? Wygląda na to, że reduktory są używane tylko do modyfikowania właściwości poziomu głównego stanu (takich jak koszyk i konto) i że nie powinienem mieć reduktora, który dotyka stanu wewnątrz konta (jak reduktor zniżek), ponieważ konto ma już reduktor . Ale gdy chcę tylko zmienić jedną właściwość daleko w dół drzewa stanu, scalenie każdego obiektu od tej zmiany aż do łańcucha obiektu do dziecka korzenia staje się skomplikowane ...
Czy możesz/możesz mieć reduktory wewnątrz reduktorów, jak w tym przypadku masz reduktor zniżek?
Cholera, pokonaj mnie kilka sekund - świetna odpowiedź! – mxstbr
W rzeczywistości możesz użyć 'combineReducers()' więcej niż jeden raz w swojej aplikacji. Polecam wypróbowanie przykładu [shopping-cart] (https://github.com/reactjs/redux/tree/master/examples/shopping-cart/reducers) w repozytorium Redux, które demonstruje różne schematy składu reduktora. –
To fajne, nie zdawałem sobie z tego sprawy. Jednak nie jest celem, aby mieć tak płaskie drzewo stanu, jak to możliwe? Gdzie jest równowaga między zagnieżdżonymi reduktorami a drzewem o płaskim stanie? – Skitterm