状态返回未定义--React Native

时间:2017-12-11 05:33:08

标签: javascript reactjs react-native ecmascript-6

我尝试从异步存储中获取值并将其分配给State。 访问灌输到URL

时,状态值将为null / undefined
 constructor(props) {
    super(props);
    this.state = {
        stAccntList: [],
        stUserAccountNo: '',
        stCustNo: '',
        resp: '',
    };
    AsyncStorage.getItem('UserAccountNo').then((value) => {
        if (value != '') {
            accno = value;
            this.setState({ stUserAccountNo: value });
           // alert(this.state.stUserAccountNo);
        }
    }).done();
    AsyncStorage.getItem('CustomerNo').then((value) => {

        if (value != '') {
            cusno = value;
            this.setState({ stCustNo: value });
           // alert(this.state.stUserAccountNo);

        }
    }).done();


}


     componentWillMount() {

        let restUrl = urls.URL + this.state.stCustNo + "/" + "accounts" + "/" + this.state.stUserAccountNo;

}

this.state.CustNo和this.state.stUserAccountNo返回null。

请告诉我哪里出错了。

2 个答案:

答案 0 :(得分:2)

由于您尝试异步获取数据并更新状态,因此无法保证在执行componentWillMount之前数据可用。

您可以在componentDidMount中使用async-await而不是

constructor(props) {
    super(props);
    this.state = {
        stAccntList: [],
        stUserAccountNo: '',
        stCustNo: '',
        resp: '',
    };

}

async componentDidMount() {
   var userAccountNo = await AsyncStorage.getItem('UserAccountNo');
   var CustomerNo = await AsyncStorage.getItem('CustomerNo');
   if (userAccountNo != '') {
        this.setState({ stUserAccountNo: userAccountNo });
   }
   if (CustomerNo != '') {
        this.setState({ stCustNo: CustomerNo });
   }
   if(userAccountNo !== '' && CustomerNo !== '') {
     var restUrl = urls.URL + this.state.stCustNo + "/" + "accounts" + "/" + this.state.stUserAccountNo;
   }
}

答案 1 :(得分:0)

restURL是否立即使用或稍后使用(即点击事件或其他事件以后)?如果立即使用它,您可能需要使用promisesasync await来跟踪在使用restURL之前两个AsyncStorage完成的时间。如果您以后使用该URL,那么您可以在需要使用之前完成依赖它,或者在使用之前立即检查。