多层嵌套SWRConfig时配置选项的生效规则是什么
多层嵌套SWRConfig的配置生效规则
嵌套使用SWRConfig时,配置会执行深度合并:同名字段以内层配置为准,未在内层配置中声明的上层选项会正常继承生效。
针对你提出的fetcher覆盖场景,具体生效逻辑如下:
- 你示例中的内层SWRConfig显式配置了
fetcher: customFetch,因此内层组件树覆盖范围内的所有SWR请求,都会使用customFetch作为请求方法,不会继承外层定义的默认fetch实现 - 如果内层SWRConfig仅配置了错误重试、缓存策略、重验证规则等其他选项,未声明fetcher字段,内层组件依然会继承使用外层的全局fetcher,其余未重写的配置项也会自动沿用上一层的设置
- 如果你需要在内层保留上层fetcher逻辑的基础上做扩展,可以通过
useSWRConfig钩子获取上层配置后做包装,无需重复编写全量配置
对应场景的完整生效示例:
<SWRConfig value={{ fetcher: (resource, init) => fetch(resource, init).then((res) => res.json()), errorRetryCount: 3, revalidateOnFocus: false }} > {/* 该层级组件默认使用全局fetcher,错误重试3次,关闭聚焦重验证 */} ... <SWRConfig value={{ fetcher: customFetch, // 仅重写fetcher字段 }} > {/* 该层级组件使用customFetch作为fetcher,依然继承上层的errorRetryCount、revalidateOnFocus配置 */} ... </SWRConfig> </SWRConfig>
注意:嵌套配置的合并是深度合并,嵌套对象类型的配置项不会被整体替换,仅对象内同名字段会被覆盖。
内容的提问来源于stack exchange,提问作者Elfandrei
相关产品推荐
相关产品推荐

