在redux减速机上使用括号表示法

时间:2016-09-04 06:34:39

标签: redux react-redux

我有一个表单应该为商店中的每个更改更新我的商店。为了不必为每个属性/字段制作20-30个不同的操作,我创建一个包含property-name和value的单个操作将是一个很好的方法。所以行动看起来像这样:

export function(property, value){
    return{
        type: UPDATE_MODEL,
        property: property,
        value: value
    }
}

当将它传递给我的reducer时,我尝试使用括号表示法。

case UPDATE_MODEL: {
    return Object.assign({}, state, {[action.property]: action.value});
}

这样做时:

dispatch(myAction("Type", {Id: 1}));

我的reducer将Type属性设置为一个数组,而不是仅将属性Type设置为传入对象。有没有办法正确安装?

我试图在lodash上使用_cloneDeep对我想要更改的当前状态对象,然后在其上使用括号表示法,然后返回object.assign与该新对象,实际上有效,但感觉非常错误。

1 个答案:

答案 0 :(得分:1)

这个怎么样?



function updateModel(state, action) {
  return Object.assign({}, state, {
    [action.property]: action.value
  })
}

function updateModelAction(property, value) {
  return {
    type: 'UPDATE_MODEL',
    property,
    value
  }
}

function reducer(state, action) {
  switch (action.type) {
    case 'UPDATE_MODEL':
      return updateModel(state, action)
    default:
      return state
  }
}

console.log(reducer({}, updateModelAction('foo', { bar: 'baz' })))