Значение моего состояния не меняется при нажатии кнопки

#react-native

#react-native

Вопрос:

 onButtonPress = () => {
  min = 1000;
  max = 9999;
  randomotp = min   (Math.random() * (max - min));
  console.log(Math.round(randomotp));
  this.setState({
    otpfield:'#48A23A'
   });
   console.log('result',this.state.otpfield);
  }
}
  

Я выполнял эту функцию в кнопке при нажатии, но соответствующее значение (т.е. Отпитое поле) не меняется

Комментарии:

1. Вы пробовали консоль. записать значение otpfield в обратный вызов setState? this.setState({ otpfield:'#48A23A' }, () => console.log('result',this.state.otpfield));

Ответ №1:

React не обновляет состояние немедленно, это асинхронная операция. Следовательно, ваш console.log() вызов выполняется слишком быстро, и состояние еще не изменено.

Вместо этого используйте обратный вызов «afterUpdated» (второй параметр метода setState):

 this.setState(
    {property: true},
    () => console.log(this.state.property)
);
  

Ответ №2:

Состояние не изменится. Функция onButtonPress должна сначала завершить выполнение, прежде чем изменять состояние.

используйте метод жизненного цикла componentDidUpdate, чтобы проверить, изменилось ли состояние

 componentDidUpdate(prevProps, prevState) {
 console.log('result',this.state.otpfield);
 //new State
 console.log('result',prevState.otpfield);
// prev State
}
  

Комментарии:

1. вызывается ли componentDidUpdate только при изменении реквизитов компонентов или также при изменении внутреннего состояния (после setstate )?

2. я думаю, вы имеете в виду componentWillReceiveProps. componentDidUpdate . может вызываться как при изменении реквизитов, так и состояния.