首页 > redux执行删除操作

redux执行删除操作

通过redux进行数据管理,当点击删除列表中的某一项时,显示的结果是清空了整个列表,
重新刷新之后,没有被删除的其他项才重新load出来,要删除的那一项也确实是删除了。

export function getStartupStatus(state = {
  startupStatuses: []
},action) {
  switch (action.type) {
    // 获取数据时
    case STARTUP_STATUS_SUCCESS:
      let response = action.response
      let startupStatuses = response.entities.startupStatus
      return Object.assign({}, state, {
        startupStatuses: response.result.map(id => startupStatuses[id])
      })
     // 添加一项
    case ADD_STATUS_SUCCESS:          
      var response = action.response
      state.startupStatuses.push(response.entities.startupStatus[response.result])
      return state
      // 修改其中一项
    case UPDATE_STATUS_SUCCESS:        
      var response = action.response
      return Object.assign({}, {
        startupStatuses: Array.from(state.startupStatuses, (item,index) => {
          return item.id == response.result ? response.entities.startupStatus[response.result] : item
        })
      })
      // TODO 删除
    case DELETE_STATUS_SUCCESS:  
      var response = action.response
      return state.startupStatuses.filter(item => {
        (item.id != response.result.id)
      })
    default:
      return state
  }
}

添加和修改操作也没任何问题,删除时,返回的值都是正常的,前台显示删除成功,也没有任何报错信息,删除成功后state.startupStatuses返回的也是过滤后删除项的新数组,不明白为什么删除一项后,其他项也都不显示了,需要刷新后才显示出来。删除后,直接执行添加操作,会提示push undefinded


写法有问题,你把delete的那个case return的东西console出来看一下就知道了


改为:

    case DELETE_STATUS_SUCCESS:  
      var response = action.response
      return {
        startupStatuses: state.startupStatuses.filter(item => {
          (item.id != response.result.id)
        })
      }

startupStatuses 被你丢了。

你的 ADD 写的也有问题,不要去修改state,只能构造新值。

更新:
漏了一点,请见 @two_cat 的答案。


大哥你没发现你del的filter callback和其他的不太一样吗…加了大括弧必须的写return啊…或者你把大括弧去了,()=>()或者()=>{return ()}才对吧…

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