[React] nextjs useSWR导致的死循环,组件一直重复渲染rerender

起因:使用一段mockup的data,替换useSWR api调用
现象:有个组件(嵌套很深)一直在重复渲染

export const useDashboards = () => {
   // return useSWR<Dashboard[]>("/api/dashboards");

  return JSON.parse("mockData")

}

useEffect(()=>{doSth}, [dashboards])里面的dashboards一直变化, 在一堆代码里找了几天root cause, 最后竟然是因为mockup data返回方式有问题。

useSWR有缓存,这个JSON.parse返回的是new对象, useEffect一直认为它在变
但是这个Dashboards一直变化, 实在是诡异。https://swr.vercel.app/docs/advanced/understanding

修改组件useEffect使用useDeepCompareEffect可以解决,
或者修改这个useSWR:
1.使用useMemo,
2.使用() => Promise.resolve(JSON.parse(mockData))作为useSWR的第二个fetcher参数。

API如果准备好了 就不会遇到这个问题了, — —

不少人也遇到过这个问题:https://developer.aliyun.com/article/1112258

posted @ 2025-09-19 10:50  funny_coding  阅读(6)  评论(0)    收藏  举报
build beautiful things, share happiness