使用给定密钥的不可变JS更新Redux中的项目



Redux 状态:

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);
    }
  );

试图从字面上替换我找到的整个对象。如果我设置一个带有值的键,而不是整个对象,上面的代码就可以工作

要更新对象或数组,您需要updateIn方法。

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);
    // ...
  }
}

最新更新