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

React useScript自定义Hook中useEffect的[src]依赖项是否必要?

useScript Hook中useEffect的[src]依赖项是否必要?

结论是必须保留[src]作为依赖项,原因如下:

  1. 支持动态src的业务场景
    这个Hook的设计初衷就包含动态加载脚本的需求——比如组件初始化时src为null,后续通过接口请求或状态变化拿到真实脚本URL;或者需要根据业务场景切换不同脚本地址(比如环境切换、功能开关)。如果把依赖改成[],useEffect只会在组件挂载时执行一次,后续src变化时不会重新触发,脚本永远不会加载,或始终使用第一次的旧src,完全违背Hook的设计意图。

  2. 规避React闭包陷阱
    按照React的规则,useEffect内部用到的所有外部变量都必须加入依赖数组。如果去掉[src],effect会捕获组件第一次渲染时的src值,即使后续src更新,effect里还是用旧值,引发逻辑错误。比如当src从null变为真实URL时,effect不会重新执行,依然停留在if (!src)分支,状态一直是idle。

  3. 保证脚本复用逻辑正常触发
    当src变化时,Hook需要查询是否存在对应src的已加载脚本,并更新当前实例的状态。如果依赖是[],这部分逻辑永远不会触发,新src对应的脚本无法被加载或复用。

你测试时觉得改成[]还能正常运行,大概率是因为测试场景里src固定不变,但一旦遇到动态变化的src场景,问题就会暴露出来。

内容的提问来源于stack exchange,提问作者DD.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 03:48:43