在给定密钥的情况下使用ImmutableJS更新Redux中的项目

时间:2018-01-18 21:03:26

标签: reactjs redux immutable.js

Redux State:

let initialState = Immutable.fromJS({
  budgetItems: [],
  editingBudget: [[]]
});

尝试更新budgetItems部分中的项目,这是一个对象数组。

数组中对象的结构如下:

  let initBudget = {budgetCategory: '', budgetCost: '', budgetDate: ''};

我的尝试:

case types.UPDATE_EXISTING_BUDGET:
  return state.getIn(['budgetItems']).update(
    state.getIn(['budgetItems']).findIndex(function(item) {
      return item.get("budgetCategory") === action.payload.budgetCategory;
    }), function(item) {
      return item.set(action.payload.budgetCategory);
    }
  );

尝试逐字替换我找到的整个对象。如果我使用值设置单个键而不是整个对象

,则上面的代码正常工作

1 个答案:

答案 0 :(得分:0)

要更新对象或数组,您需要updateIn method

import { fromJS, List, Map } from immutable;

const initialState = fromJS({
  data: List([Map({ foo: { bar: baz } } })],
});

functionFooReducer(state = initialState, action) {
  switch (action.type) {
    case UPDATE:
      return state
        .updateIn(['data.0.foo.bar'.split('.')], (), action.value);
    // ...
  }
}