[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
@@@build beautiful things, share happiness@@@

浙公网安备 33010602011771号