React useScript自定义Hook中useEffect的[src]依赖项是否必要?
useScript Hook中useEffect的[src]依赖项是否必要?
结论是必须保留[src]作为依赖项,原因如下:
支持动态src的业务场景
这个Hook的设计初衷就包含动态加载脚本的需求——比如组件初始化时src为null,后续通过接口请求或状态变化拿到真实脚本URL;或者需要根据业务场景切换不同脚本地址(比如环境切换、功能开关)。如果把依赖改成[],useEffect只会在组件挂载时执行一次,后续src变化时不会重新触发,脚本永远不会加载,或始终使用第一次的旧src,完全违背Hook的设计意图。规避React闭包陷阱
按照React的规则,useEffect内部用到的所有外部变量都必须加入依赖数组。如果去掉[src],effect会捕获组件第一次渲染时的src值,即使后续src更新,effect里还是用旧值,引发逻辑错误。比如当src从null变为真实URL时,effect不会重新执行,依然停留在if (!src)分支,状态一直是idle。保证脚本复用逻辑正常触发
当src变化时,Hook需要查询是否存在对应src的已加载脚本,并更新当前实例的状态。如果依赖是[],这部分逻辑永远不会触发,新src对应的脚本无法被加载或复用。
你测试时觉得改成[]还能正常运行,大概率是因为测试场景里src固定不变,但一旦遇到动态变化的src场景,问题就会暴露出来。
内容的提问来源于stack exchange,提问作者DD.
相关产品推荐
相关产品推荐

