假设您正在创建产品并将产品的属性保存在减速器中。
当产品具有一些属性时,您可以定义action type
来更新每个属性,并在reducer中定义一个case
处理程序以更新属性。
例如ACTION_TYPE_UPDATE_PRODUCT_NAME
ACTION_TYPE_UPDATE_PRODUCT_TYPE
,依此类推。
但是随着属性数量的增加,这种做法导致大量代码只是将属性保存在reducer中。
我只定义一个update product action
。
然后,我只需要从化简器中获取当前产品,根据需要更新字段,然后使用update product action
将产品存储回化简中。
这种方法是否理智,还有其他选择吗?
答案 0 :(得分:1)
您可以通过一项操作更新所需数量的属性。例如,您更新了用户数据,新属性为{用户名:“新名称”,城市:“新城市”}。您不应在单独的操作中更新每个属性。只需使用一组新属性更新整个用户对象即可。
updateUserData(state, action) {
return { ...state, user: { ...state.user, username: action.username, city: action.city } }
答案 1 :(得分:0)
在操作中,您可以定义如下:
const update_product_field = ({ prop, value, id }) => {
return {
type: ACTION_TYPE_UPDATE_PRODUCT,
payload: { prop, value, id }
};
};
然后在减速器中可以定义以下情况:
case ACTION_TYPE_UPDATE_PRODUCT:
return { ...state, [action.payload.prop]: action.payload.value };
您的方案没有正确或错误的答案,仅取决于您可以编写动作和简化程序的抽象程度