组件重新装载时 useSWR 会发起请求

news/2025/9/20 15:32:50/文章来源:https://www.cnblogs.com/dingshaohua/p/19102487

默认情况下,组件重新装载时 useSWR 会发起请求。这是 SWR "stale-while-revalidate" 设计哲学的一部分。

重新装载时的行为

function MyComponent() {const { data } = useSWR('/api/data', fetcher)// 组件卸载又重新挂载时:// 1. 立即显示缓存数据(如果存在)// 2. 在后台发起新请求验证数据是否更新// 3. 如果有更新,静默替换数据
}

重新装载的常见场景

场景1:路由导航

// 从 /page-a 导航到 /page-b,再返回 /page-a
// PageA 组件会卸载又重新挂载,触发重新验证
function PageA() {const { data } = useSWR('/api/page-a', fetcher) // 重新挂载时会请求return <div>Page A: {data}</div>
}

场景2:条件渲染

function ToggleComponent() {const [show, setShow] = useState(true)return (<div><button onClick={() => setShow(!show)}>Toggle</button>{show && <DataComponent />} // 切换时会卸载/重新挂载</div>)
}function DataComponent() {const { data } = useSWR('/api/data', fetcher) // 重新显示时会请求return <div>{data}</div>
}

场景3:键值变化导致的重新挂载

function UserProfile({ userId }) {// 当 userId 变化时,组件实际上会重新挂载const { data } = useSWR(`/api/user/${userId}`, fetcher)return <div>User: {data?.name}</div>
}

如何控制重新装载时的行为

1. 完全禁止重新验证

const { data } = useSWR('/api/data', fetcher, {revalidateOnMount: false // 重新挂载时不请求
})

2. 智能控制(推荐)

const { data } = useSWR('/api/data', fetcher, {revalidateIfStale: false // 有缓存就不重新验证,如果 key 发生变化或者存在定时刷新,useSWR 也会正常发起新的请求。
})

3. 使用不可变数据

import useSWRImmutable from 'swr/immutable'const { data } = useSWRImmutable('/api/data', fetcher) // 永远不会自动重新验证

4. 延长去重间隔

const { data } = useSWR('/api/data', fetcher, {dedupingInterval: 60000 // 60秒内避免重复请求
})

为什么这是默认行为?

useSWR 选择在重新装载时请求是因为:

  1. 数据新鲜度:确保用户看到最新数据
  2. 后台更新:用户体验无中断(先显示缓存,后台更新)
  3. 一致性:保持多设备间数据同步
  4. 错误恢复:自动重试失败的请求

实际应用建议

// 根据数据类型选择合适的策略
function SmartComponent() {// 实时数据:使用默认行为const { data: notifications } = useSWR('/api/notifications', fetcher)// 静态数据:禁止重新验证const { data: countries } = useSWR('/api/countries', fetcher, {revalidateIfStale: false})// 用户数据:中等刷新频率const { data: user } = useSWR('/api/user', fetcher, {dedupingInterval: 30000 // 30秒内不重复请求})return <div>{/* ... */}</div>
}

总结:组件重新装载时默认会请求,这是为了保持数据新鲜度。你可以通过配置来精确控制这个行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kettle插件-kettle数据清洗插件,轻松处理脏数据

前面我们已经介绍了很多kettle插件,每个kettle插件都它的使用场景,我们在做数据同步ETL的过程中,势必要处理一些脏数据,把数据质量提高。今天我们一起来学习这这款数据清洗插件。 1、转换设计 1)生成记录 模拟数据…

Java 如何在 Excel 中添加超链接?使用 Spire.XLS for Java 轻松实现 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

中二

以下内容由 Gemini 2.5 Pro 生成好的,我们来对这个“核心引擎”进行详细的规格说明和功能解构。 “观察-推断-建模”引擎 (ODM Engine) 技术规格书 1. 核心架构 (Core Architecture) 该引擎并非一个单一功能的处理器,…

RocketMQ vs RabbitMQ vs Kafka - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:设计模式概述

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Seedream 4.0 简直绝了!

2025年,我们正站在AI内容创作的历史拐点。在这个AI图像工具满天飞的时代,我们经历了太多看起来很美的失望:Nano Banana生成的商品图总是细节失真,中文文字渲染混乱。 我体验了很多AI生图工具,我从未见过如此颠覆性…

财务管理NPV与IRR投资分析在IT行业案例

财务管理NPV与IRR投资分析在IT行业案例财务管理NPV与IRR投资分析在IT行业案例背景 真实IT服务器投资场景XT公司准备投资购买服务器硬件,用于AI部署DeepSeek R1 72b模型,我们使用NPV方法进行投资分析 联想(Len…

优化sigmoid

原代码 def sigmoid(x):result = 1 / (1 + np.exp(-x))return result问题:当-x值过大,会导致溢出错误 改进后代码 def improved_sigmoid(x):# 创建一个与输入x相同大小的空数组来存储结果result = np.zeros_like(x)#…

mysql查询死锁,mysql查询死锁方法

在 MySQL 中查询死锁可以通过以下方法实现: 查看最近一次死锁信息MySQL 会记录最近一次死锁的详细信息,可以通过以下命令查看: sql SHOW ENGINE INNODB STATUS; 在输出结果中,找到 "LATEST DETECTED DEADLOCK…

【IEEE出版、已连续5届稳定快速EI检索】第六届计算机工程与智能控制学术会议(ICCEIC 2025)

【IEEE出版 |已连续5届EI稳定检索】 第六届计算机工程与智能控制学术会议(ICCEIC 2025) 2025 6th International Conference on Computer Engineering and Intelligent Control 在这里看会议官网详情 会议时间:2025年…

软工第二次作业之个人项目——论文查重

论文查重系统 - 项目报告项目信息 详情课程 软件工程作业要求 个人编程作业项目目标 实现一个论文查重程序,规范软件开发流程,熟悉Github进行源代码管理和学习软件测试GitHub仓库 https://github.com/ymxc152/312300…

对实体类Id自增

我们首先需要明白 lambda 表达式 (item=>item.Id)↓ Expression 树 → 检查是属性访问↓ Expression.Assign → 拼出 “item.Id = index”↓ Compile() → 生成机器码委托 Action<T,int>↓ 放进 Concurr…

HarmonyOS之UIContext 与 UIAbility、WindowStage 的关系 - 指南

HarmonyOS之UIContext 与 UIAbility、WindowStage 的关系 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

向上一步——当做事纠结的人停止决策内耗,你就是掌控自己的神!

向上一步——当做事纠结的人停止决策内耗,你就是掌控自己的神!重要选择的核心思维:批判性思维的完整实践指南 面对人生关键选择时,外界繁杂观点常让人陷入内耗,而批判性思维的核心是 “不盲从他人经验,只锚定自我…

Windows平台安装cocos2d-x V3.17.2

https://juejin.cn/post/7201091178489462842

完整教程:Mistral Document AI已正式登陆Azure AI Foundry(国际版)

完整教程:Mistral Document AI已正式登陆Azure AI Foundry(国际版)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &q…

深入解析:InnoDB存储引擎-锁

深入解析:InnoDB存储引擎-锁2025-09-20 15:04 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important…

飞书机器人推送消息通知用自定义机器人

gofly.v1kf.com vx: llike620飞书内的机器人分为 应用机器人 和 自定义机器人 两类 自定义机器人 自定义机器人仅支持单向往群组内推送消息,不支持与用户进行消息交互,一般适用于临时性在群中推送固定内容的场景。 …

深入解析:vue 批量自动引入并注册组件或路由

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …