【发布时间】:2018-08-07 08:23:18
【问题描述】:
我正在使用 react 和 redux 创建一个 todolist,当我更新 redux 状态数组时它不会重新渲染,我的状态实际上是一个包含对象的数组,如下所示:
[{index:1,value:'item1',done:false}, {index:2,value:'item2',done:false}]
我想要做的是点击我想将done的值切换为'true', 但不知何故,我无法做到这一点。
这就是我在减速器中所做的:
list.map((item)=>{
if(item.index===index){
item.done=!item.done;
return [...state,list]
}
但是即使 done 在单击切换按钮时不断变化,它也不会重新渲染。
似乎我正在以某种方式改变状态。 请告诉我我哪里出错了,我应该怎么做。
你能举出类似的例子吗?我可以正确更新简单数组的状态,但是为包含 objects 的数组执行此操作让我感到困惑。 那么,你能举个例子吗?
这是完整的 reducer 代码:
export default function todoApp(state=[],action){
switch(action.type){
case 'ADD_TODO':
return [...state,action.item];
case 'TOGGLE_TODOS':
const index = action.index;
const list = state;
list.map((item)=>{
if(item.index===index){
item.done=!item.done;
}
return [...state,list];
});
default:
return state;
}
}
【问题讨论】: