当前位置: 首页 > article >正文

vue 中的v-once

🔰 基础理解

✅ 语法:

<span v-once>{{ msg }}</span>

✅ 效果:

•	只渲染一次,之后无论数据如何变化,该内容都不会更新。
•	非常适用于静态内容或首次加载后不需要变化的数据。

🧪 示例:

<template><div><p v-once>页面加载时:{{ now }}</p><p>始终更新:{{ now }}</p><button @click="update">更新时间</button></div>
</template><script>
export default {data() {return {now: new Date().toLocaleTimeString()}},methods: {update() {this.now = new Date().toLocaleTimeString()}}
}
</script>

🔍 点击按钮后:

  • 第一个 v-once 的段落不变。
  • 第二个正常显示时间变化。

🔍 深入理解(进阶用法与原理)

✅ 渲染性能优化利器

  • Vue 会给使用 v-once 的节点打上“静态标记”,渲染后直接跳过后续的虚拟 DOM diff。
  • 大量使用静态内容的场景(如文章页、商品详情页首屏)中,可以明显降低开销。

✅ 不仅适用于文本,也适用于组件和 DOM 树

<!-- 整个 div 结构都不会再更新 -->
<div v-once><h1>{{ title }}</h1><p>{{ content }}</p>
</div><!-- 甚至可以用在组件上 -->
<StaticSection v-once />

✅ 组合使用其他指令时的影响

<div v-for="item in list" :key="item.id" v-once>{{ item.name }}
</div>
  • 上面每一项都只渲染一次。
  • 若 list 变化,新项目不会被渲染,原有的不会更新(⚠️ 谨慎使用)。

⚠️ 注意事项:

场景建议
静态展示内容✅ 推荐使用
表单项、交互式组件❌ 禁止使用
配合 v-for 渲染数据列表⚠️ 谨慎使用
需要响应式更新的数据❌ 禁止使用

🧠 总结

内容说明
指令名称v-once
核心作用元素或组件仅初次渲染,后续数据更新不再影响它
最佳场景静态内容、加载提示、SEO内容占位
性能优化避免不必要的 diff 提升渲染性能
陷阱警告会永久冻结 DOM,不适合交互、响应式场景

在vue2/3上的差异

✅ 共通点(Vue 2 与 Vue 3 都一致)

特性Vue 2 / Vue 3 共通
语法一致<div v-once>...</div>
渲染后不可变✅ 渲染一次后,后续数据变更不再影响 DOM
用于组件或元素✅ 都支持作用于组件、元素、结构块
优化静态性能✅ 避免 diff,提升性能
与 v-for 一起使用✅ 可使用,但慎用(新项不会渲染)

🚀Vue 2 vs Vue 3 差异点

方面Vue 2Vue 3
编译静态优化部分依赖手动优化(如 v-once)自动静态提升(静态节点优化更强)
静态标记处理机制借助 v-once 标记为静态静态标记 + 静态提升:更智能判断
与 Composition API 配合不适用(无 Composition API)可在 script setup 等组合式代码中使用
与 Suspense 一起用不支持 Suspense可用于 Suspense 结构中的静态部分

🧪 Vue 3 中的替代 / 辅助方案

虽然 v-once 保留了,但 Vue 3 提供了更丰富的性能优化方式,例如:

defineRenderEffect(底层运行时层面优化)

Vue 3 更深入的静态节点处理,减少对 v-once 的依赖。

使用 markRaw 跳过响应式追踪(组合式 API)

import { markRaw } from 'vue'const staticData = markRaw({ foo: 'bar' })

用于组件外部传入不希望响应式追踪的对象。

🔧 实际开发建议

场景推荐方式
静态首屏 HTML✅ v-once
组合式组件中的加载块✅ + fallback
一次性说明/免责声明✅ v-once
性能优化目标是 diff 节点过多✅ Vue 3 会自动优化,v-once 为锦上添花

🎯 总结一句话

v-once 在 Vue 2 和 Vue 3 中基本一致,但 Vue 3 靠自动静态提升已经能覆盖大部分场景,不再强依赖 v-once;它仍然是你手动优化静态结构的利器,但 Vue 3 让你用得更少、写得更轻松。

http://www.lryc.cn/news/2385026.html

相关文章:

  • 鸿蒙ArkTS-发请求第三方接口显示实时新闻列表页面
  • 2025年开源大模型技术全景图
  • 【创造型模式】工厂方法模式
  • 【MySQL】使用文件进行交互
  • # 大模型的本地部署与应用:从入门到实战
  • 布丁扫描高级会员版 v3.5.2.2| 安卓智能扫描 APP OCR文字识别小助手
  • 可视化大屏全屏后重载echarts图表
  • 20200201工作笔记常用命令要整理
  • Java对象内存模型、如何判定对象已死亡?
  • spark任务的提交流程
  • ELK简介和docker版安装
  • 利用条件编译实现RTT可控的调试输出
  • 【软件设计师】计算机网络考点整理
  • 智慧化工园区安全风险管控平台建设方案(Word)
  • 【uniapp】 iosApp开发xcode原生配置项(iOS平台Capabilities配置)
  • MYSQL优化(1)
  • C++可变参数宏定义语法笔记
  • 基于BERT预训练模型(bert_base_chinese)训练中文文本分类任务(AI老师协助编程)
  • Windows逆向工程提升之IMAGE_EXPORT_DIRECTORY
  • python与flask框架
  • 【普及+/提高】洛谷P2613 【模板】有理数取余——快读+快速幂
  • 从数据到智能:openGauss+openEuler Intelligence的RAG架构实战
  • 【Linux】初见,基础指令
  • 什么是实时流数据?核心概念与应用场景解析
  • 工业RTOS生态重构:从PLC到“端 - 边 - 云”协同调度
  • 数据结构与算法学习笔记(Acwing 提高课)----动态规划·状态机模型
  • 基于开源链动2+1模式AI智能名片S2B2C商城小程序的社群构建与新型消费迎合策略研究
  • 高性能RPC框架--Dubbo(五)
  • 计算机视觉与深度学习 | PSO-MVMD粒子群算法优化多元变分模态分解(Matlab完整代码和数据)
  • 搭建自己的语音对话系统:开源 S2S 流水线深度解析与实战