React中如何正确缓存API数据避免重复请求?
我用useEffect去请求用户数据,但每次组件重新渲染都会重新发请求,明明数据没变。试过把依赖数组设为空,但又拿不到最新的userId。有没有办法只在userId变化时才请求,同时缓存结果?
这是我的代码:
useEffect(() => {
const fetchUser = async () => {
const res = await fetch(<code>/api/user/${userId}</code>);
const data = await res.json();
setUser(data);
};
fetchUser();
}, [userId]);
这样只有第一次请求会发网络请求,之后同一个userId会直接从缓存读。
如果你想更规范一点,可以封装成自定义hook:
然后组件里直接用
const user = useUser(userId)就行。另外如果你们项目里这种场景多,建议直接上 @tanstack/react-query 或者 SWR,这俩都是专门干缓存这事的,开箱即用,比自己写省心多了。