关于reactjs:通过新数组将数组替换为不可变状态— react / redux

replace an array in immutable state by new array — react/redux

我在reducer中具有一个不变的状态,如下所示:

1
2
3
4
5
6
7
8
9
10
11
const initialState = fromJS({
  rates: [],
  fromDialogOpen: false,
  mealPlans: [],
  roomTypes: [],
  editRateFormOpen: false,
  rateToEdit:"",
  selectedDate: moment().toDate(),
  selectedRoomType: null,
  selectedMealPlan: null
});

我进行了一个api调用,结果是一个空数组[]或对象数组

1
2
3
4
5
6
7
[
    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调用接收到数组时,我需要将我的Rates-state更新为我接收到的值-即,一个空数组或对象数组!

我该怎么做?
我试过了:

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

但是这没用!!


您有正确的主意,但语法错误。

选项1

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

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

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

选项2

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

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

进一步阅读:JS传播语法

对于immutable.js

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

Immutable.js文档对其进行了更详细的说明。