我目前正在导入此库:
import update from 'react-addons-update';
这是我的清单:
[{id:1,title:“some title”},{id:2,title:“some other title”}]
我的行动:
action.type:'change_title'
action.payload:[2,“一些新标题”]
action.payload中的第一个参数是指我想要更改的数组的 id
这是我的reducer代码:
export default (state = [], action) => {
switch (action.type) {
case 'change_title':
return update(state, {
0: {
title: { $set: action.payload[1] }
}
});
default:
return state;
}
};
正如你所看到的,在它的当前状态下,我的reducer函数总是改变了第一个数组中的“title”值,但我想知道:怎么能我根据“id”值指定要修改的数组?
答案 0 :(得分:1)
你至少可以通过两种方式来做到这一点。首先,使用update()
,您需要使用Array.prototype.findIndex()
查找要更新的项目的索引:
const index = state.findIndex(x => x.id === action.payload[0]);
case 'change_title':
return update(state, {
[index]: {
title: { $set: action.payload[1] }
}
});
或者只使用地图:
case 'change_title':
return state.map(item ==> {
if(item.id !== action.payload[0]) {
return item;
}
return {
...item,
title: action.payload[1]
};
});