我尝试从异步存储中获取值并将其分配给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。
请告诉我哪里出错了。
答案 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
是否立即使用或稍后使用(即点击事件或其他事件以后)?如果立即使用它,您可能需要使用promises或async await来跟踪在使用restURL之前两个AsyncStorage
完成的时间。如果您以后使用该URL,那么您可以在需要使用之前完成依赖它,或者在使用之前立即检查。