Во-первых, вы ссылаетесь на фактическое состояние, изменяя его.
Во-вторых, вы не мутируете состоянием, все равно помните одну вещь:
этот тип присваивания не является потокобезопасным, посмотрите на следующий пример:
const { settings } = this.state;
const time = moment();
time.set({ minutes: 0, seconds: 0 });
// If at this execution point another procedure changes the state (e.g. setting another key in the state object)
const new_settings = {
...settings
at: [...settings.at, time]
};
// You are actually setting an "old" state for some keys
this.setState({ settings: new_settings });
Я бы пошел на следующее:
this.setState(oldSettings => {
const newSettings = {...oldSettings};
//modify the copy newSettings
return newSettings;
});
N.B. Если состояние сложное, вы должны его глубоко клонировать!