React Native 从异步 componentDidMount 获取初始状态

IT技术 javascript android reactjs react-native
2021-05-06 15:44:56

我想从已经从 componenDidMount 调用的异步函数向 render() 显示状态值,但在第一个执行组件中它返回未定义,第二次尝试它显示正确的数据

这是我的状态this.state.userData

我的问题是,render() 和 componentDidMount() 之间的优先处理函数是什么?

这是我的代码

componentDidMount: function(){
    store.get('userData').then((val) => {
        if(typeof val != 'undefined'){
            this.setState({'userData':val});
        }
    }).done();
},
render: function() {
    return(
        <View>
              <Text>{this.state.userData}</Text> // displaying undefined
        </View>
    );
}
1个回答

我不确定你在问什么。

据我了解:您想在调用 render() 之前执行一个函数来设置数据。在这种情况下:查看生命周期方法 -> link它很好地解释了您可以在调用 render 之前使用 componentWillMount() 。 在此处输入图片说明

但是:这并不能保证您在调用渲染之前拥有数据。我建议你设置一个额外的状态变量来知道异步调用何时完成,在此之前只调用一个加载微调器。

就像是:

constructor(props){
 super(props);
 this.state={
  loading: true
 }
}

在您的功能中:

this.setState({userData:val, loading: false});

使成为:

render() {
if(this.state.loading){
  return( <ActivityIndicator size='large' style={{height:80}} />
}
else{
 return(
     <View>
           <Text>{this.state.userData}</Text> // displaying undefined
     </View>
 );
}

(应该只给出一个想法 - 代码是即兴的......但应该解决未定义的问题)玩得开心