reactjs - React Native Promise、setState 和 Navigation 问题
问题描述
我是堆栈溢出的新手,所以我希望我能正确发布内容。我正在使用 React、React Native 和 React Navigation。基本上,我需要帮助来从一个屏幕导航到下一个屏幕并传递从获取请求中获取的数据。似乎代码有效,但 setState 在导航之前不会发生。如果我转到上一个屏幕并再次向前导航,则响应就在那里。
非常感谢您的帮助。谢谢!
const [allResources, setAllResources] = React.useState([])
function getallresources() {
fetch('API url', {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
info: info1,
info2: info2,
}),
})
.then((response) => response.json())
.then((responseJson) => setAllResources(responseJson.allResources)
.then(()=> navigation.navigate("AllResources", {allResources: allResources})
)
.catch((error) => {
console.error(error);
});
}
解决方案
setState
不是同步的,尽管我不确定这真的是问题所在。我会尝试responseJson.allResources
直接传递并查看是否可以调试状态更新是否是问题:
const [allResources, setAllResources] = React.useState([])
function getallresources() {
fetch('API url', {...} ),
})
.then((response) => response.json())
.then((responseJson) => {
setAllResources(responseJson.allResources)
navigation.navigate("AllResources", {allResources: responseJson.allResources})
})
.catch((error) => {
console.error(error);
});
}
如果这有效,也许setState
真的是问题所在。如果是这样,您可以从这样的导航useEffect
:
useEffect( () => {
if (allResources){
navigation.navigate("AllResources", {allResources: allResources})
}
}, [allResources])
(当然要navigation.navigate
取消.then
回调。)如果这不起作用,你必须看看你是如何在 AllResources 屏幕中访问allResources
你的。params
推荐阅读
- java - 使用 getter/setter 在记录中的布尔值上写入字符串
- json - Elasticsearch - 使用 jq 导出到 CSV
- javascript - 如果鼠标悬停导航栏
- javascript - 将用户输入从输入字段获取到通过 for 循环创建表格单元格的 js 表格中
- java - 为什么不能在没有赋值的情况下使用三元运算符(左侧的变量)?
- asp.net - 将数据发送到视图并显示
- java - 有一种方法可以将 % (sql) 放入 java 中。像这样“从员工中选择名字,其中名字像'A%e'”
- c - 用 realloc 增加二维数组的行?
- qt - QML ComboBox 项目不显示正确的文本
- javascript - 使用 int 和 float 的数字原型