Этого будет недостаточно, потому что Состояние реакции, как ожидается, будет неизменным :
Никогда не изменяйте this.state напрямую, так как последующий вызов setState () может заменить мутациюты сделал.Обрабатывайте this.state так, как если бы оно было неизменным.
Эта «неуклюжая реализация» также неверна, this.state
не следует использовать вместе с this.setState
, поскольку setState
является асинхронным и может привести к условиям гонки:
Думайте о setState () как о запросе, а не как о немедленной команде для обновления компонента.Для лучшего восприятия производительности React может задержать ее, а затем обновить несколько компонентов за один проход.React не гарантирует, что изменения состояния будут применены немедленно.
<...>
setState () не всегда сразу обновляет компонент.Это может пакетировать или отложить обновление до позже.Это делает чтение this.state сразу после вызова setState () потенциальной ловушкой.
Правильный способ - использовать функцию обновления:
addItem = item => {
this.setState(({ grudges }) => ({ grudges: [grudge, ...grudges] }));
}
Это дополнительно выигрывает от деструктурирования синтаксиса.