首页 > return语句不是只能出现在函数内吗

return语句不是只能出现在函数内吗

第三个 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;
  }
}

哪里的代码?这个写法不是「主流」写法。

另外这个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

}
}

【热门文章】
【热门文章】