Если ваше новое состояние рассчитывается на основе любого значения, которое уже находится в состоянии - тогда вам следует использовать вторую форму setState
, где вы используете функцию:
this.setState(prevState => ({
ninjas: [...prevState.ninjas, newNinja]
}));
или даже:
this.setState(({ninjas}) => ({
ninjas: [...ninjas, newNinja]
}));
Это связано с тем, что изменения состояния являются асинхронными и могут быть пакетированы по соображениям производительности.
Если вы измените состояние с помощью некоторой переменной, которая не на основе любого значения из состояния - вы можете использовать простую версию:
this.setState({
answer: 42
});
Относительно вашего
так как мы используем новый массив каждый раз в первом примере
действительно, каждый раз вы создаете новый массив, но вы создаете его, используя некоторый набор элементов, которые могут быть неактуальными к тому времени, когда фактическое изменение состояния будет выполнено React
под капотом.