在Redux的Reducer中更新嵌套数组

问题描述:

我正在尝试更新reducer中的对象数组中的特定索引。该州有一系列对象。 isSearch是对象的属性。在行动的有效载荷中,我传递要更新的索引和值。这是我的代码:在Redux的Reducer中更新嵌套数组

case actions.UPDATE: 
    return { 
    ...state, 
    arrObj: { 
     ...state.arrObj, 
     arrObj[action.payload.index].isSearch : action.payload.isSearch, 
    }, 
    }; 

我得到这个错误Unexpected token, expected , at arrObj[action.payload.index].有人能告诉我如何纠正呢?

+0

那么,arrObj [action.payload.index] .isSearch:action.payload.isSearch应该是什么意思? – zerkms

+0

@zerkms我分配arrObj [action.payload.index]对象属性isSearch – funkadelic

如果您正在寻找更新您的状态里的一个单值,试试这个:

case actions.UPDATE: 
    var newState = { ...state } 
    var arrayObj = newState.arrayObj = state.arrayObj.slice() 
    var element = arrayObj[action.payload.index] = { ...arrayObj[action.payload.index] } 
    element.isSearch = action.payload.isSearch 
    return newState 
+0

这似乎并没有工作,浏览器挂起。 – funkadelic

+0

我修复了浏览器挂起问题。然而,该州似乎并没有改变。元素在返回新状态时不会被分配给任何东西。 – funkadelic

+0

在'action.payload.index'中是否应该有一个对象?如果不是,我需要更改上面的代码。 – gyre

我猜immutability-helper包从npm将极大地帮助你在更新嵌套Redux的状态

import update from 'immutability-helper'; 

....... 

case actions.UPDATE: 
    return update(state, { 
     arrObj: { 
      [action.payload.index]: { 
       isSearch: { 
         $set: action.payload.isSearch 
       } 
      } 
      } 
     })