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

清除SWR缓存的正确方法:两种mutate导入方式该选哪一个?

SWR 清除全缓存时两种 mutate 方式的选择

在执行官方推荐的全缓存清除代码时,两种mutate的使用场景和适配性有明确区别:

  • 直接导入的mutate(import {mutate} from "swr"):
    这是SWR提供的全局默认mutate函数,仅对默认SWR实例的缓存生效。如果你的项目没有自定义任何SWRConfig配置(比如统一fetcher、缓存策略),用它来清除全缓存完全没问题。但如果项目里存在多个SWR实例(或全局配置了SWRConfig),它只会操作默认实例的缓存,可能无法覆盖你自定义配置下的缓存内容。

  • 从useSWRConfig()获取的mutate:
    这个mutate是绑定当前组件所在SWR上下文的函数,会自动适配你通过SWRConfig组件设置的全局/局部配置。不管项目有没有自定义实例,它都能准确操作当前上下文对应的全部缓存,不会出现缓存清除不彻底的情况。

场景建议

如果你的项目使用了SWRConfig做全局配置(比如统一设置请求方法、缓存过期时间),或者存在局部的SWR上下文,优先选择useSWRConfig()的方式。如果是简单的小项目,没有任何自定义配置,两种方式效果一致,任选其一即可。

代码示例

使用useSWRConfig()的写法

import { useSWRConfig } from 'swr';

function ClearAllCacheBtn() {
  const { mutate } = useSWRConfig();

  const clearCache = () => {
    mutate(
      key => true,
      undefined,
      { revalidate: false }
    );
  };

  return <button onClick={clearCache}>清除所有缓存</button>;
}

直接导入mutate的写法

import { mutate } from 'swr';

function ClearAllCacheBtn() {
  const clearCache = () => {
    mutate(
      key => true,
      undefined,
      { revalidate: false }
    );
  };

  return <button onClick={clearCache}>清除所有缓存</button>;
}

内容的提问来源于stack exchange,提问作者howard wolowitz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:03:22