【发布时间】:2024-01-19 13:41:01
【问题描述】:
我在从我的 componentDidMount() 向后端发送请求时遇到问题。基本上在渲染屏幕之前我需要做两件事:
- 从API调用中获取数据并保存到状态
- 将获取的数据发送到后端并从后端获取响应值。
我在第一步遇到的问题是 setState() 是异步的,即使我在 console.log 中的 componentDidMount() 中的数组不是空的(我看到它是 render() 和 componentDidUpdate 函数中的元素) () 数组它将为空。现在,问题是:在显示屏幕之前,我仍然需要将该状态数组发送到后端。但是,当它在那里显示为空时,我该怎么做呢?
如果我从渲染函数中的 Button 元素发送请求,一切正常,但这并不是我所需要的。有什么建议吗?
this.state = {
ActivityItem: [],
}
componentDidMount() {
this.getDataFromKit(INTERVAL); //get data from library that does API calls
this.sendDataToServer(); //sending to backend
}
componentDidUpdate() {
console.log("componentDidUpdate ", this.state.ActivityItem) // here array is not empty
}
getDataFromKit(dateFrom) {
new Promise((resolve) => {
AppleKit.getSamples(dateFrom, (err, results) => {
if (err) {
return resolve([]);
}
const newData = results.map(item => {
return { ...item, name: "ItemAmount" };
});
this.setState({ ActivityItem: [...this.state.ActivityItem, ...newData] })
})
});
最后一个:
sendDataToServer() {
UserService.sendActivityData(this.state.ActivityItem).then(response => {
}).catch(error => {
console.log(error.response);
})
在这里它按预期工作:
<Button
title='send data!'
onPress={() => this.sendDataToServer()
} />
更新 如果我喜欢这个(包裹在 initKit 函数中,这将返回 undefined。
AppleKit.initKit(KitPermissions.uploadBasicKitData(), (err, results) => {
if (err) {
return;
}
return new Promise((resolve) => {
AppleKit.getSamples(dateFrom, (err, results) => {
if (err) return resolve([]);//rest is the same
【问题讨论】:
标签: javascript reactjs react-native state