接口在 Network 里一秒刷十几次,控制台没有报错,Profiler 显示 effect 每次渲染都在执行,传进去的 params 对象每次都是新引用。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,对象字面量每次渲染都重新创建,依赖数组做的是浅比较,引用一变就判定为依赖更新,effect 自然反复触发,请求停不下来,这就是常见的请求风暴。

碰到「依赖数组对象引用」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。报错里带路径的,先去看那个路径在不在、权限对不对。

const params = useMemo(() => ({ id, page }), [id, page]);
useEffect(fetchList, [params]);

同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

具体做法是,依赖拆成 id 和 page 这类基本类型字段,不要直接放对象;对象用 useMemo 把引用固定住,别在渲染时每次新建;回调函数用 useCallback 包一层稳定引用,子组件才不会白渲染。

最后用这个标准收尾,同一组参数下接口只请求一次,滚动和输入都不再触发请求。

作者 9823189