You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

useParams加入useEffect依赖数组后,页面resize时重复执行问题

解决useParams参数放入useEffect依赖导致resize重复执行的问题

React Router的useParams()每次组件渲染时,返回的params对象都是新的引用——哪怕参数值完全没变。当页面resize触发组件重渲染时,新的params对象会被useEffect判定为依赖项变化,从而重复执行内部逻辑。

解决方法很直接:

  • 不要把整个params对象放进依赖数组,改用params里的具体字段(比如params.id),这样只有当id的实际值变化时,才会触发useEffect。
  • 同时记得把useEffect内部用到的所有变量都加入依赖数组,避免遗漏导致的逻辑异常。

修改后的代码如下:

import { useParams } from "react-router-dom";

const params = useParams();
    
useEffect(() => {
  if (
    (params.id && !video) ||
    (!!params.id && !!video && params.id !== video?._id)
  ) {
    dispatch(addViewVideo({ _id: params.id }));
    dispatch(getVideo({ _id: params.id }));
  }
}, [params.id, video, dispatch]);

这样调整后,页面resize时因为params.id的值没变化,useEffect就不会被无意义触发,只有当路由id真正改变或者video状态更新时,才会执行对应的dispatch逻辑。

内容的提问来源于stack exchange,提问作者Agustin R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:57:11