我想从redux store(state)的列表中删除一个项目,它显示该元素已被删除,但渲染的页面仍然显示该元素。
这是减速器代码:
dosigma(0, 100000)
在组件中,我将状态放入这样的列表变量中: - > export default function todoApp(state=[],action){
switch(action.type){
case 'ADD_TODO':
return [...state,action.item];
case 'TOGGLE_TODOS':
const index = action.index;
let newState = state.map((item) => (
item.index===index? {...item, done: !item.done}: item
));
return newState;
case 'REMOVE_TODOS':
let removeFromState = state;
for(var i=0;i<removeFromState.length;i++){
if(removeFromState[i].index===action.index){
removeFromState.splice(i,1);
}
}
return removeFromState;
default:
return state;
}
}
并在组件中,将要显示的元素放在itemsArray变量中。此处的列表不应显示该项目,但它会显示该项目。那么,我在这里做错了什么?
const list = this.props.state;
答案 0 :(得分:1)
我在这里回答我自己的问题,因为我从评论中发现我正在改变状态。
当我在做let removeFromState = state;
时
removeFromState只是对原始状态的引用
因此在使用拼接时我正在改变它。
修复是使用
let removeFromState = [...state];
将原始状态复制到此变量上,然后我对此变量进行了更改并返回了新状态,现在它正常工作。