Javascript - обновить значение объекта внутри неизменной записи - PullRequest
0 голосов
/ 21 января 2020

У меня есть объект Immutable Javascript (из библиотеки Immutable), сделанный так

const myObj = Immutable.Record({
  id: 1,
  myObject: {
    firstValue: false,
    secondValue: false,
  },
});

Я бы хотел обновить свойство firstValue до true , используя метод set класс Immutable.Record, но поскольку этот объект используется как состояние React с использованием Flux, я хотел бы сделать это в одной строке, например:

reduce(state, action){
    switch(action.type){
        case ActionTypes.CHANGE_VALUE:
            //The value to change is stored in action.value
            return state.set("myObject", //AddCodeHere);
    }
}

action.value переменная обязательна, поэтому я должен обновить это значение, используя эту переменную.

Как я могу это сделать?

РЕДАКТИРОВАТЬ

I нашел ответ (немного сложнее, но это работает). Он использует одну из последних вещей ES6, метод Object.fromEntries.

return state.set(
          "myObject",
          Object.fromEntries(
            Object.entries(state.get("myObj")).map(([k, v]) =>
              k === action.value ? [k, !v] : [k, v]
            )
          )
        );

1 Ответ

0 голосов
/ 21 января 2020

Я никогда не использовал Flux, но думаю, что это может быть то же самое для Redux. Попробуйте использовать это Неизменяемые шаблоны обновления

return {
  ...state,
  myObject: {
    ...state.myObject,
    firstValue: true
  }
}
...