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文档对其进行了更详细的说明。