Как я могу изменить обновление на updateIn, когда я использую immutable.js - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь сделать мой код аккуратным, используя immutable.js.

Но я не знаю, как заменить обновление на updateIn.Пожалуйста, помогите мне.

[SET_COLOR]: (state, action) => {
  const counters = state.get("counters");
  const { color, index } = action.payload;

  return state.set(
    "counters",
    counters.updateIn([index, "color"], color => /*I got stuck here*/ )
  );
}

Я пробовал {color}, ({color}), color, color = color ...

Это оригинал.

const initialState = Map({
  counters: List([
    Map({
      number: 0,
      color: "black"
    })
  ])
});

(...)

[SET_COLOR]: (state, action) => {
  const counters = state.get("counters");
  const { color, index } = action.payload;

  return state.set(
    "counters",
    counters.update(index, counter => counter.set("color", color))
  );
},

1 Ответ

0 голосов
/ 26 декабря 2018

Вместо этого следует попробовать setIn :

[SET_COLOR]: (state, action) => {
  const { color, index } = action.payload;

  return state.setIn(["counters", index, "color"], color);
}

updateIn будет полезно, только если обновленное значение зависит от текущего значения, расположенного в пути, указанном для updateIn.Например:

const immutableObject = Immutable.fromJS({ outerProp: { innerCount: 1 } }); 
immutableObject.updateIn(['outerProp', 'innerCount'], count => count + 1);
...