Подтвердить что ты не робот

Обновление объекта массива в состоянии React с помощью помощника по неизменности

Я обновляю объект внутри массива в состоянии React, используя помощник по неизменности.

Объект, который я хочу изменить, вложен:

this.state = {
  a: {
    b: [{ c: '', d: ''}, ...]
  }
} 

Я хочу обновить prop c в n-м элементе b с помощью помощника по неизменяемости.

Эквивалентный код без помощника неизменности:

const newState = Object.assign({}, this.state);
newState.a = Object.assign({}, newState.a);
newState.a.b = newState.a.b.slice();
newState.a.b[n] = Object.assign({}, newState.a.b[n]);
newState.a.b[n].c = 'new value';
this.setState({ newState });

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

4b9b3361

Ответ 1

Один из способов сделать это - использовать $set

let index = 0;
let newState = update(this.state, {
   a: {
     b: {
      [index]: {
               c: { $set: "new value"}
       }
    }
  }
});
this.setState(newState);

jsfiddle

Ответ 2

Я импортирую update из помощника по неизменности здесь :)

this.state = {
  a: {
    b: [{ c: '', d: ''}, ...]
  }
} 


this.setState((prevState, props) => update(prevState, {
    a: {
        b: {
            $apply: b => b.map((item, ii) => {
                if(ii !== n) return item;
                return {
                    ...item,
                    c: 'new value'
                }
            })
        }
    }
}))