我目前正在导入这个库:
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”值指定要修改的数组?
你至少可以通过两种方式来做到这一点。首先,使用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]
};
});