2016-11-07 83 views
2

在我減速,我有這樣的狀態:如何使用狀態對象中更新陣列反應/終極版

const initialState = fromJS({ 
resources: false, 
testval: [0, 0, 0, 0],}) 

我想追加或當我的動作被觸發名爲testVal刪除陣列值。我有不可變的,不可變性輔助程序導入,但即時通訊與語法掙扎,以使其工作。

例如這個心不是工作 - 國家心不是改變:

return update(state, { 
     testval: { 
      $set: 'test' 
     } 
    }); 

回答

0

好吧我想通了使用Immutable。

添加到陣列:

return state.updateIn(['showtask'], arr => arr.push(action.userid)) 

從陣列中刪除:

return state.updateIn(['showtask'], arr => arr.splice(arr.indexOf(action.userid),1)) 
2

看起來你可能會被混合了兩個不同的工具集。 Immutable.js是一組專門的數據結構,而Immutability-Helper庫期望在純JS對象上工作。

您可能需要閱讀Redux文檔的Immutable Update Patterns部分,該部分討論如何在普通JS數據上正確執行不可變更新的方法以及Prerequisite Concepts文檔頁面中的相關鏈接。

0

它,因爲你正在更新其錯誤的方式,

月1日是你的陣列將被轉換爲列表對象,所以需要在列表樣式中更新。

下面的例子1是我正在更新的索引,你可以對此使用任何動態變量,item也是該索引處的當前值。如果這是對象(在其他一些用例中),則可以修改該對象並將其返回。

const initialState = Immutable.fromJS({ 
resources: false, 
testval: [0, 0, 0, 0]}); 

//replace initial state with state, i just posted example code 

initialState = initialState.set("testval",initialState.get("testval").update(1,(item)=>{ 
return 2; 
})); 
console.log(initialState.get("testval")) 

的更詳細的例子,你也可以查看這個帖子https://onl9class.com/using-immutable-js/