【发布时间】:2022-08-16 23:13:10
【问题描述】:
您好,我正在尝试创建某种彩票,我想知道应该使用哪种方法通过操作有效负载修改状态。
假设我有状态
type initialCartState = {
productsFromPreviousSession: Product[]
selectedProduct: Product
balance: number,
productsInCart: Product[]
}
我们的减速器看起来像
const reducers = {
addProduct(state, action) => {
state.products.push(state.action.payload.product)
},
addProductsFromPreviousSession(state, action) => {
state.products.push(...state.productsFromPreviousSession)
},
}
我注意到我在我的组件中对这两种类型使用了两种完全不同的方法,因为它看起来像
const component = () => {
const selectedProduct = useSelector(state => state.cart.selectedProduct);
const availableBalance = useSelector(state => state.cart.balance - sum(state.cart.products, \'price\'));
const dispatch = useDispatch()
const sumOfProductsFromPreviousSession = useSelector(state => sum(state.cart.products,\'price\'))
return (
<div>
<div onClick={() => {
if((balance - selectedProduct.price) > 0) {
dispatch(cartActions.addProduct(selectedProduct))
}
}}/>
<div onClick={() => {
if((balance - sumOfProductsFromPreviousSession) > 0) {
dispatch(cartActions. addProductsFromPreviousSession())
}
}}/>
</div>
)
}
有两种不同类型的处理动作,在 addProduct 中我使用了选择器并在动作负载中传递值。在 Add products from previous session 我们依赖于 reducer 中的状态(也有中间件用于保存在 localStorage 中,但我使用了 store.getState())。哪种方法是正确的?
还有当我们将 balance 转移到另一个 reducer 时它会如何变化,然后我们将无法访问那个 i cartReducer?
当增量和减量依赖于当前的 reducerState 并且有没有有效负载的操作时,我看到计数器上有很多示例,但是在我的示例中没有使用验证。
提前致谢 !
标签: javascript reactjs typescript redux