Я относительно новичок в React и пытаюсь случайно изменить значение одного из моих свойств состояния после отображения страницы. Но использование setState
в componentDidMount
, похоже, не работает каждый раз, иногда я получаю возвращаемое значение исходного состояния (чего никогда не должно происходить)
Что-то я здесь делаю не так?
constructor(props) {
super(props);
this.state = {
houseAd: null
};
}
а затем на setState
componentDidMount() {
const houseAds = ['ad1', 'ad2'];
const rand = houseAds[Math.floor(Math.random() * houseAds.length)];
this.setState({
houseAd: rand
});
}
Иногда я получаю тот или иной из своего массива houseAds
, но иногда он просто возвращает null
Затем в моем рендере я просто делаю что-то простое, например:
let ad;
if (this.state.houseAd === 'ad1') {
ad = 'Ad1';
}
if (this.state.houseAd === 'ad2') {
ad = 'Ad2'
}
Но очевидно, что когда значение состояния равно null
, ничего не отображается.
Код в порядке, только в первый раз вы получите null
, в следующий раз, когда вы не получите нулевые значения, проверьте значение состояния с помощью функции обратного вызова после такого обновления.
this.setState({
houseAd: rand
}, ()=> {console.info(this.state.houseAd});
componentDidMount
называется после начальный render
- вы, наверное, не заметили - второй вызов рендеринга принудительно setState
быстро исправляет / скрывает начальное состояние.
console.info(this.state.houseAd)
в render
, чтобы доказать это.
Если вам нужно что-то при запуске - сделайте это в constructor
.
Может вам это интересно github.com/styled-components/styled-components/issues/1575