【发布时间】:2016-06-27 02:58:41
【问题描述】:
我正在努力思考如何在 redux 中更改深度嵌套的状态。对我来说,组合 reducer 并更改这些部分的第一级状态属性是有意义的。我不太清楚的是如何更改深度嵌套属性的状态。 假设我有一个购物车应用程序。以下是我的状态:
{
cart: {
items: []
},
account: {
amountLeft: 100,
discounts: {
redeemed: [],
coupons: {
buyOneGetOne: false
}
}
}
}
当用户输入代码时,假设他们可以兑换“buyOneGetOne”优惠券,并且该值应该变为 true。 我有一个用于购物车的减速器和另一个用于帐户的减速器。对于一级属性(比如我正在清理购物车的物品),我只需在减速器中执行以下操作:
case 'EMPTY_CART':
return Object.assign({}, state, {items: []});
但是,为了更改 buyOneGetOne,我似乎首先需要对优惠券执行 Object.assign(因为 buyOneGetOne 已修改),然后对折扣执行 Object.assign(因为我已修改优惠券),然后最后发出动作,以便 reducer 可以对帐户执行 Object.assign (因为折扣现在已更改)。不过,这似乎非常复杂且容易出错,这让我相信一定有更好的方法。
我做错了吗?似乎减速器仅用于修改状态的根级别属性(如购物车和帐户),并且我不应该有一个接触帐户内部状态的减速器(如折扣减速器),因为帐户已经有一个减速器.但是,当我只想更改状态树下方的一个属性时,将每个对象从该更改一直到对象链向上合并到根的子级就变得很复杂...
你能/应该在减速器内部有减速器吗,就像在这种情况下有一个折扣减速器?
【问题讨论】:
标签: javascript reactjs redux