redux:在更新reducer时摆脱样板

时间:2018-12-08 13:46:58

标签: reactjs redux

假设您正在创建产品并将产品的属性保存在减速器中。

当产品具有一些属性时,您可以定义action type来更新每个属性,并在reducer中定义一个case处理程序以更新属性。

例如ACTION_TYPE_UPDATE_PRODUCT_NAME ACTION_TYPE_UPDATE_PRODUCT_TYPE,依此类推。

但是随着属性数量的增加,这种做法导致大量代码只是将属性保存在reducer中。

我只定义一个update product action
然后,我只需要从化简器中获取当前产品,根据需要更新字段,然后使用update product action将产品存储回化简中。

这种方法是否理智,还有其他选择吗?

2 个答案:

答案 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 };

您的方案没有正确或错误的答案,仅取决于您可以编写动作和简化程序的抽象程度