reactjs - 为什么我的 React 本机 route.params 保存以前的路由数据?
问题描述
让我们考虑一下我有一个项目列表[a,b,c,d,e,f ....]
我现在正在做的是列出它们,当我单击对象时,a
我将转到详细信息a
,当我单击时,b
我将转到b
事情是这样的
对于清单,我得到了 1 个 api,对于详细信息,我得到了另一个 api。因此,每当我导航到详细信息组件时,我都会使用 useEffect 挂钩来调用该特定项目的详细信息数据。
代码看起来像这样
const {
id,
name,
number,
shortDescription,
} = route.params.info;
useEffect(() => {
const unsubscribe = navigation.addListener('focus', () => {
axios
.get(`${baseUri}/getproducts?productid=${id}`)
.then((res) => {
setEquipments(res.data[0].Equipments);
setDisplayTab('description');
console.log('------------------------');
console.log(res.data[0].id);
console.log('------------------------');
if (res.data[0]?.Variants === undefined) {
alert('Undefined');
setChooseVariantState(false);
} else {
alert('Greater than 1');
setChooseVariantState(true);
}
})
.catch((err) => {
console.log(err);
});
});
return unsubscribe;
}, [navigation]);
如您所见,我正在使用id
来自route params
.
问题是,在转到A
项目后,再转到项目B
,console.log 将始终显示A
. 它没有更新到B,但是在渲染项目时,它正在渲染正确的项目。
即使去项目C,D,E ...
控制台总是会显示A
,我认为 route.params 正在保存用户去的第一个项目的信息
这是为什么?
解决方案
推荐阅读
- python - 将我的 Python 脚本定向到我的 SSL .pem 文件的更简洁的方法?
- asp.net - ASPX 未在生产 Azure Stack 中重定向
- linux - Centos 7 中的 Strat JConsole
- datadog - 如何在 datadog 的一个监视器中为具有相同阈值的两个指标设置警报?
- clickhouse - 如何找到两个数组列的交集
- python - 进一步抓取链接
- flutter - 保持用户登录
- mongodb - 如何使用 $cond 在 Golang 中运行 MongoDB 查询
- maven - 使用 antrun maven 插件从插件类路径执行 jar
- python - 添加从 JSON 请求收集的字符串