我正在尝试为React Native内置的iOS应用加载启动画面.我试图通过类状态,然后一个setTimeout函数来完成这个,如下所示:
class CowtanApp extends Component {
constructor(props){
super(props);
this.state = {
timePassed: false
};
}
render() {
setTimeout(function(){this.setState({timePassed: true})}, 1000);
if (!this.state.timePassed){
return ;
}else{
return (
);
}
}
}
加载页面工作一秒钟,然后我想当setTimeout尝试将状态更改为true时,我的程序崩溃:'undefined不是对象(评估this.setState)'.我已经花了几个小时,有关如何修复的想法?
经典的javascript错误.
setTimeout(function(){this.setState({timePassed: true})}, 1000)
当setTimeout
运行this.setState
,this
不再CowtanApp
,但window
.如果使用=>
表示法定义函数,es6将自动绑定this
.
setTimeout(() => {this.setState({timePassed: true})}, 1000)
或者,您可以let that = this;
在您的顶部使用a render
,然后切换引用以使用局部变量.
render() { let that = this; setTimeout(function(){that.setState({timePassed: true})}, 1000);
为settimeout写一个新函数.请试试这个.
class CowtanApp extends Component { constructor(props){ super(props); this.state = { timePassed: false }; } componentDidMount() { this.setTimeout( () => { this.setTimePassed(); },1000); } setTimePassed() { this.setState({timePassed: true}); } render() { if (!this.state.timePassed){ return; }else{ return ( ); } } }
更改此代码:
setTimeout(function(){this.setState({timePassed: true})}, 1000);
到以下内容:
setTimeout(()=>{this.setState({timePassed: true})}, 1000);
在ReactNative .53上,以下对我有用:
this.timeoutCheck = setTimeout(() => { this.setTimePassed(); }, 400);
setTimeout是ReactNative库函数。
“ this.timeoutCheck”是我的变量,用于保存超时对象。
“ this.setTimePassed”是我在超时时调用的函数。