0

在我的代码中,action.payload 指向一个 todo.index,所以我的 REMOVE_TODO 案例应该过滤掉一个与触发事件的索引相同的 todo。但是,我得到了语法错误。我弄乱了我的包装,甚至尝试从头开始重写它,但无法消除这些语法错误。有人看到我在这里缺少的东西吗?请让我知道是否需要更多信息。谢谢你们!

import { ADD_TODO } from '../constants/action-types'; 
import { REMOVE_TODO } from '../constants/action-types';

const initialState = {
  todos: []
};

const rootReducer = (state = initialState, action) => {
  switch (action.type) {
    case ADD_TODO:
    return {
        ...state,
        todos: [...state.todos, action.payload]
    }

    case REMOVE_TODO:
    return {
      ...state,
      todos: [...state.todos.filter((todo, i) => {i  !== action.payload})]
    }

    default:
      return state;
  }
}

export default rootReducer;
4

2 回答 2

0

好吧,您错过了在过滤器函数中返回值。

看看演示。

const initialState = {
  todos: [1,2,3,7,8,5]
};

const rootReducer = (state = initialState, action) => {
  switch (action.type) {
    case 'ADD_TODO':
    return {
        ...state,
        todos: [...state.todos, action.payload]
    }

    case 'REMOVE_TODO':
    return {
      ...state,
      todos: [...state.todos.filter((todo, i) => i  !== action.payload)]
    }

    default:
      return state;
  }
}

let op = rootReducer({todos:[1,2,3,4,5,6]},{type:'REMOVE_TODO',payload:1});
console.log(op)

于 2018-12-07T17:43:42.233 回答
0

原来我只是从我的过滤器方法中返回一个对象。todos: [...state.todos.filter((todo, i) => {i !== action.payload})] 刚刚从箭头函数的 return 中去掉了大括号,现在一切都很好。

于 2018-12-07T19:19:18.397 回答