我正在学习React和Redux,目前正在阅读Adam Freeman的Pro React 16。考虑第5章中的这个化简器示例。该化简器处理修改购物车的操作。这是减速器的一部分:
import { ActionTypes } from "./Types";
export const CartReducer = (storeData, action) => {
let newStore = { cart: [], cartItems: 0, cartPrice: 0, ...storeData }
switch(action.type) {
case ActionTypes.CART_ADD:
const p = action.payload.product;
const q = action.payload.quantity;
let existing = newStore.cart.find(item => item.product.id === p.id);
if (existing) {
existing.quantity += q;
} else {
newStore.cart = [...newStore.cart, action.payload];
}
newStore.cartItems += q;
newStore.cartPrice += p.price * q;
return newStore;
我的理解是reducer必须是纯函数,但是storeData当产品已经存在于cart数组中时,这一函数似乎会修改store参数。具体来说,它更新了cart项目的quantity属性,该属性existing来自storeData的cart数组的浅表副本。因此,storeData将被修饰为副作用。
我对么?
翻过高山走不出你
精慕HU
紫衣仙女
相关分类