Taro页面跳转后数据未更新,如何强制重新获取数据?
我在用Taro做电商列表页时遇到个问题,从商品列表跳转到详情页再返回后,列表数据没更新。之前用setData和useState都试过,但页面数据还是显示旧的缓存内容。
代码是这样写的:
const [goodsList, setGoodsList] = useState([]);
useEffect(() => {
const fetchData = async () => {
const res = await api.getGoodsList();
setGoodsList(res.data);
};
fetchData();
}, []);
const gotoDetail = (id) => {
Taro.navigateTo({ url: <code>/pages/detail/index?id=${id}</code> });
};
但返回列表页时数据没变,必须手动刷新才更新,求大神指点怎么让页面重新请求数据?
useEffect,所以数据不会更新。你得在页面里监听
show事件,手动触发数据更新。修改你的代码如下:这样用户从详情页返回时,就会重新拉数据了。如果你的列表页有传参(比如分类、排序条件),建议把这些参数放进
useEffect的依赖数组,或者用useCallback优化一下fetchData。useEffect没有正确处理依赖或者生命周期问题,导致返回时不会重新触发数据请求。复制这个:这样每次返回页面时都会触发
useEffect重新加载数据。如果你用的是 Taro 的onShow生命周期也可以替换掉第二个useEffect。懒得改的话直接复制上面那段就行。