我有一个表单应该为商店中的每个更改更新我的商店。为了不必为每个属性/字段制作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与该新对象,实际上有效,但感觉非常错误。
答案 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' })))