@Paxest
Freecodecamp camper :)

Как правильно принудительно обновить состояния класса?

Доброго времени суток!
Мне было необходимо, чтобы счетчик изменял значение состояния не через один раз, а постоянно, ведь известно, что setState() действует асинхронно.

Для этого я помещаю пустую функцию, чтобы он обновлялся сразу. Использую такого вида запись:
this.setState({ text: this.state.text.slice(0, -1)}, () => {})

Нашел еще один способ:
this.setState(function(state, props) {
 return {      
   text: this.state.text.slice(0, -1)
 }});

или через функцию
// outside your component class
 function increaseScore (state, props) {
    return {score : state.score + 1}
 }
class User{
 …
// inside your component class
 handleIncreaseScore () {
   this.setState( increaseScore)
 }
…
 }

Но хотелось бы не городить каждый раз функции, и я подумал, что возможно есть способ сделать это через componentWillReceiveProps() и shouldComponentUpdate().
Вопрос: как правильно принудительно обновить состояния класса? И можно ли сделать это через методы жизненного цикла?
  • Вопрос задан
  • 180 просмотров
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
Для решения вашей проблемы вам достаточно обновлять все данные одним вызовом:
onClick(e) {
  const { value, type } = e.target.dataset;

  this.setState({
    letter: this.state.letter + value,
    lastType: this.state.newType,
    newType: type,
    compareType: type === this.state.newType,
  });
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы