猿问

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;
  }
}


jeck猫
浏览 1221回答 1
1回答

Smart猫小萌

哪里的代码?这个写法不是「主流」写法。另外这个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}}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答