setState在React Native的AsyncStorage内部不起作用。
Chart1.Series(0).Points(0).Url="/url1"
Chart1.Series(0).Points(1).Url="/url2"
Chart1.Series(0).Points(2).Url="/url3"
使用constructor(props) {
super(props);
this.state = {userId: ''};
}
componentDidMount() {
AsyncStorage.getItem('USER_ID', (err, result) => {
if (!err && result != null) {
this.setState({
userId: result
});
}
else {
this.setState({
userId: null
});
}
});
alert(this.state.userId);
let userId = this.state.userId;
fetch('http://localhost/JsonApi/myprofile.php', {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
userId: userId,
}),
})
.then((response) => response.json())
.then((responseJson) => {
this.setState({userDetails: responseJson});
})
.catch((error) => {
console.error(error);
});
}
和alert设置userId
值根本不会返回任何值。尝试了Stackoverflow的其他解决方案,但未达到我的预期。
注意:代码已更新。从AsyncStorage获取userId后,它将传递给fetch。这里,缺少userId值。
答案 0 :(得分:2)
2种方法。一种是简单的方法,另一种是根据反应建议的正确方法
一个是传递值,直接声明。
.then((responseJson) => {
// this.setState({userDetails: responseJson});
this.state.userDetails=responseJson;
this.setState({}); //for update render
})
第二种方式在这里
在渲染功能中检查状态值,例如:如果UserDetails状态为null,则只要userDetails状态再次执行数据渲染并提供完美结果,都不会给您错误。
render() {
return (
<div>
{this.state.userDetails ?
this.state.userDetails.map((data, index) =>
<tr key={index}>
<td>{data.userName}</td>
<td>{data.userEmail}</td>
</tr>
)
: null
}
</div>)}
让我知道收获。如果遇到问题
答案 1 :(得分:0)
尝试在更新状态后发出警报。状态更新后,您将获得回调。
this.setState({
userId: result
},function(){
console.log("userId in async = ", this.state.userId);
alert(this.state.userId);
});
答案 2 :(得分:-1)
我不知道你为什么写那么多代码。
$serviceNames = array_column($serviceNames, Null, "language");
echo $serviceNames["fi"]["value"]; //jotain
echo $serviceNames["en"]["value"]; //something
echo $serviceNames["sv"]["value"]; //någonting
AsyncStorage.getItem("USER_ID").then((value) => {
console.log("userId in async = " + value);
this.setState({
userId: value
});
});
和error
,因为如果该字段为null,则将状态下的userId设置为null。因此您可以直接将result
设置为value
。可以使用不同的方式,就像使用userId
方法一样。
async
您可以使用
const getUserId = async () => {
try {
const userId = await AsyncStorage.getItem('USER_ID') || 'none';
} catch (error) {
// Error retrieving data
console.log(error.message);
}
return userId;
}
我不喜欢这种方式,因为我需要使用this.setState ({
userId : getUserId()
});
和async
关键字创建另一种方法。
更新
请执行与await
中的userId相关的工作,因为您在调用getIten();
之后立即提醒了userId。调用AsyncStorage
之后,AsyncStorage
返回值。
alert