Дано:
В state массив, в массиве объекты.
Надо:
Обновить у одного из объектов, одно из свойств.
Умные люди научили меня не мутировать state и делать примерно так:
onItemHintClick = (index, e) => {
const newItems = this.state.items.map((item, i) => {
if (i === index) {
return { ...item, htogle: !item.htogle };
} else {
return {...item};
}
});
this.setState({ items: newItems });
};
Т.е. в цикле собирается клон массива из массива в state, где меняется одно свойство, одного элемента.
Я только начинаю изучать React и JS и мне кажется странным - ради простой операции устраивать такую возню.
А если элементов в массиве много и они сами по себе большие?
Ведь есть прямой и изящный способ изменить нужное значение, сделать, например, так:
this.state.items[index].htogle = !this.state.items[index].htogle
this.forceUpdate();
А теперь прошу внимания - я знаю, что против такого способа выступает официальная документация, где сказано - не мутируй state и избегай forceUpdate(), это может привести к непрогнозируемым багагм.
Так я хочу спросить - ПОЧЕМУ так нельзя делать и КАКИЕ негативные последствия это может иметь?
Именно в данном случае, где не планируется использовать houldComponentUpdate() и другие продвинутые техники управления состоянием приложения.
Мне кажется, что в простых ситуациях, мутация state и немедленный вызов forceUpdate() будет работать не хуже setState, при этом код будет внятней и эффективней.
ПС. пожалуйста, не посылайте меня читать документацию, эти фразы про setState и forceUpdate() - я хочу понять, а не только слепо следовать.