#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 . может вызываться как при изменении реквизитов, так и состояния.