用新数组替换不可变状态的数组 - react / redux

时间:2018-06-17 07:58:08

标签: reactjs react-redux

我在reducer中有一个不可变状态: const initialState = fromJS({ rates:[], fromDialogOpen: false, mealPlans: [], roomTypes:[], editRateFormOpen:false, rateToEdit:"", selectedDate:moment().toDate(), selectedRoomType:null, selectedMealPlan:null });

我做一个api调用,导致我得到一个空数组array []或对象数组
**

[
    0: Object { doubleRackRate: 200, singleRackRate: 120, mealPlan: "AI", … }  
    1: Object { doubleRackRate: 12, singleRackRate: 1200, mealPlan: "AI", … }
    2: Object { doubleRackRate: 12, singleRackRate: 12, mealPlan: "AI", … }
    3: Object { doubleRackRate: 12, singleRackRate: 12, mealPlan: "AI", … }             
    4: Object { doubleRackRate: 12, singleRackRate: 12, mealPlan: "AI", … }

]

**,
作为action.payload发送状态更新!!

当我从API调用接收数组时,我需要将rate-状态更新为我收到的值 - 即空数组或对象数组!!

我该怎么做? 我试过了:

return Object.assign( ...state, {rates:action.payload})

但这没效果!!

1 个答案:

答案 0 :(得分:2)

你有正确的想法,但你的语法错了。

选项1

使用Object.assign仅更改费率字段。

return Object.assign(state, {rates:action.payload})

有些人可能会认为这是非正统的,因为它直接改变了状态。

选项2

返回状态副本,仅使用扩展语法更改费率。

return { ...state, rates: action.payload }

进一步阅读:JS spread syntax

对于immutable.js

const { set } = require('immutable')
return set(state, 'rates', action.payload)

Immutable.js documentation explains it in more detail.