Не много, чтобы фактор. Но я могу сказать, что все ваши обновления состояния могут быть объединены. Вы можете обновить несколько значений состояния одновременно.
this.setState({ hp: this.state.hp = this.state.nextHp });
this.setState({ nextHp: Math.floor(this.state.nextHp * 1.2) })
this.setState({ gold: this.state.gold + 10});
this.setState({ num: Math.floor(Math.random() * 4 + 1)});
до
this.setState({
hp: this.state.nextHp,
nextHp: Math.floor(this.state.nextHp * 1.2),
gold: this.state.gold + 10,
num: Math.floor(Math.random() * 4 + 1)
});
Примечание на стороне : Мутации состояний, такие как this.state.hp = this.state.nextHp
, являются анти-паттерном реакции и может привести к ошибкам.
Примечание второй стороны : Для обновлений состояния, которые зависят от текущих значений состояния, лучше использовать обновление функционального состояния, чтобы обновления состояния были правильно поставлены в очередь и обрабатывались в на случай, если в цикле рендеринга запущено более одного обновления.
this.setState(prevState => ({
hp: prevState.nextHp,
nextHp: Math.floor(prevState.nextHp * 1.2),
gold: prevState.gold + 10,
num: Math.floor(Math.random() * 4 + 1)
}));
Вот моя демонстрация codesandbox , которая иллюстрирует, почему это функциональное обновление может быть важным.