数据预取时怎么避免重复请求?
我在用 React 做一个商品详情页,进入页面前想提前拉取商品数据。但发现如果用户快速切换商品,会发起多个重复的请求,体验很不好。
我试过用 useRef 存请求状态,但还是没控制住。比如下面这段代码:
useEffect(() => {
const fetchData = async () => {
if (isFetching.current) return;
isFetching.current = true;
const res = await fetch(<code>/api/product/${id}</code>);
setData(await res.json());
isFetching.current = false;
};
fetchData();
}, [id]);
可一旦 id 变化快,还是会同时跑好几个请求,有啥靠谱的防重方案吗?
下面是修改后的代码示例:
通过这种方式,当 id 变化时,上一个请求会被取消,从而避免了重复请求的问题。