第三个 case 代码段, case COMPELETE_TODO 这块,
第一个return是当满足条件时返回出相应的内容,
第二个return在一个对象的todos属性后面出现的,
我就不太理解了,望热心的朋友指点迷津,谢谢你.
function todoApp(state = initState,action){
switch(action.type){
//改变state的filter,现实现实全部、完成、未完成的选择
case SETFILTER: return Object.assign({},state,
{filter:action.filter}
);
//添加todo
case ADD_TODO: return Object.assign({},state,
{
todos:[...state.todos,{
text:action.text,
complete:false
}]
}
);
//将对应index的任务变为完成状态
case COMPELETE_TODO:return Object.assign({},state,{
todos:return [
...state.slice(0, parseInt(action.index)),
Object.assign({}, state[action.index], {
completed: true
}),
...state.slice(parseInt(action.index)+ 1)
];
}
); default:
return state;
}
}
1 回答

Smart猫小萌
TA贡献1911条经验 获得超7个赞
哪里的代码?这个写法不是「主流」写法。
另外这个reducer
只能把任务标为「完成」,但不能重新打开。
看看 Redux 官方例子的写法:
function todos(state = [], action) {
switch (action.type) {
case ADD_TODO: return [ ...state, { text: action.text, completed: false } ] case TOGGLE_TODO: return state.map((todo, index) => { if (index === action.index) { return Object.assign({}, todo, { completed: !todo.completed }) } return todo })default: return state
}
}
添加回答
举报
0/150
提交
取消