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

VUE框架 04

前言
  • MVVM / 双向绑定的含义
  • watch 和 watchEffect的依赖追踪
  • v-if 和 v-for的执行和优先级
  • 为什么数据变了会更新?为什么nextTick才拿到新DOM

一、宏观架构:MVVM

1. 核心含义
  • Model(模型层):负责数据(接口数据、实体业务状态等数据)。在Vue中对应data、ref、reactive
  • Model 需具备变更通知能力(如 Vue 的响应式数据劫持),VM 才能精准捕获变化

  • view(视图层):负责UI展示。在Vue中对应template模版
  • ViewModel(视图模型):连接数据和视图的桥梁

核心定义:声明式视图{{ message }}+ VM 负责将状态映射到视图
核心机制:双向绑定(通过数据绑定与事件转发实现)
具体职责:

  1. 监听Model变化更新view;
    • 依赖响应式系统:vue2的数据劫持,vue3的代理拦截
  2. 监听view交互更新Model:暴露命令(Commands/Methods),接收并处理 View 的用户交互逻辑
    • el-model ,即 :value + @input 的语法糖
2. 为什么需要MVVM
  • 强依赖DOM(jQuery):改数据 -> 手动找DOM -> 赋值、改内容/样式
  • 数据驱动(MVVM_vue): 只改数据 -> vue自动更新DOM
<html><body><buttonid='but'>点击获取数据</button><script>// 请求constmodel={getData:function(){returnnewPromise((resolve)=>{setTimeout(()=>{resolve("获取姓名,年龄")},5000))}}}// 触发constcontroller={init:function(){$('#but').on('click',{model.getDate.then(res=>{$('#but').html(res)})})}}// 启动controller.init()</script></body></html>

二、Vue 核心原理:数据如何驱动视图

ViewModel核心实现手段:响应式系统 + 模版编译 + 渲染与DIFF

1. 响应式系统

  • 核心:数据变化时,view 如何知道并通知视图更新?
  • 机制:
    • 数据劫持
    • 依赖收集
    • 派发更新
    • {{}}插值表达式底层编译时,会触发对应响应式数据的读取,从而将数据整体深层地进行自动联动与劫持。未被响应式系统处理的数据,无法实现这种动态监听。

  • API区分
    • ref / reactive
    • watch / watchEffect

2. 模版编译 (template complier)

  • 过程:将语义化模版(v-if、v-for、v-model、{{}} 等)编译成可执行的 render function 过程
  • 产物:render 函数执行后生成 VNode(虚拟 DOM)
  • 优先级:
    • Vue 2:v-for 优先级高于 v-if
    • Vue 3:v-if 优先级高于 v-for(可用<template>包裹 或 计算属性替代)

3. 渲染与更新(DIFF 算法)

  • 一次事件循环流程:数据变化-> 触发render -> 生成新的vnode -> 新旧vnode进行diff对比 -> 找出最小变更 -> 更新真实DOM
  • 双向绑定的体现:
    • 数据->视图:响应式系统 + Diff算法
    • 视图->数据:
      • v-model 本质是语法糖。
      • v-model 语法糖本质 —> 绑定value属性+监听input事件
<input:value="msg"@input=""msg=$envet.target.value></input>

3.1. 异步更新 与 NextTick

  • vue特性
    • Vue 的 DOM 更新 是异步的:数据改变但DOM不会立刻改变
    • 数据变化时,vue不是立刻重绘DOM,而是在队列中缓冲同一事件循环中的所有数据变更。(防抖)
  • NextTick 原理
    • 在数据变化后立刻获取 DOM,拿到的是更新前的旧 DOM
    • nextTick 利用 JS 的 Event Loop(微任务/宏任务) 机制:先将“需要更新的DOM”放入队列,等待本轮同步代码跑完,再统一执行组件的更新函数(render),完成真实DOM更新(patch),最后执行nextTick回调函数。
    • 应用:
      • 即可获取元素尺寸(v-if)
      • 自动聚焦(input.focus)
<template><divref="dataRef">{{message}}</div><button@click="updateData">更新数据</button></template><scriptsetup>import{ref,nextTick}from'vue'// 区别于 this.$nextTickconstmessage=ref('初始化01')constdataRef=ref(null)constupdateData=()=>{message="updata data"console.log(dataRef.value.innerText)// 打印:初始内容// 或者 async/await 写法nextTick(()=>{// 等待 DOM 更新,返回 promiseconsole.log(dataRef.value.innerText)// 打印:更新后内容})}</script>

三、生命周期与垃圾回收机制

1. VUE 生命周期(Tick 关键节点)

beforeCreate:new Vue() 创建实例
create:data|props|method|computed - 数据操作
beforeMount:vDom - 可进行数据操作
Mount:DOM
beforeUpdate:vdom更新
update:dom更新
beforeDestory:实例被销毁前(获取实例的绑定数据进行全局更新)
destory

2. mark and sweep(V8引擎垃圾回收机制)

http://www.cnnetsun.cn/news/2623911.html

相关文章:

  • 内容创作团队如何利用 Taotoken 调用不同模型优化文案生成流程
  • 在Hermes Agent项目中集成Taotoken自定义提供商完成复杂任务调度
  • Gemini多因素认证部署 checklist(含OIDC集成、设备指纹校验、异常登录熔断阈值配置表)
  • DeepSeek模型服务化卡点全突破:阿里云ALB+HTTPS+自定义域名+Token鉴权四层防护部署(附可审计的OpenAPI网关配置模板)
  • 解密抖音直播数据采集:DouyinLiveWebFetcher技术实现与应用实践
  • TypeScript 映射类型:Readonly、Partial、Required 的深度解析
  • 拆解 LangChain:为什么说它是“胶水框架“?
  • Chatbox:如何优雅实现多AI模型API的统一配置管理
  • Fate/Grand Automata:3步实现FGO游戏自动化的终极指南
  • 营收创新高、指引大幅上调,Marvell数据中心业务燃爆,与英伟达扩大合作
  • Java 8+ JSR310 时间日期API全攻略:从核心原理到生产级避坑实战
  • 降AI率工具真的有用吗?2026实测6款主流工具避坑指南
  • 广州周年庆活动策划哪个更值得推荐
  • BG3模组管理器终极指南:5步解决模组冲突,轻松管理《博德之门3》模组
  • 专业开发者指南:使用pywencai高效获取同花顺问财金融数据
  • 八大网盘下载困境如何破局?LinkSwift直链助手全攻略
  • 语音AI正在越过“恐怖谷”?独家披露头部厂商未公开的MOS衰减曲线——训练数据量每增10万条,自然度仅提升0.08分!
  • Sora 2数字人视频制作全流程拆解(从文本驱动到唇形同步精度达98.7%的工业级标准)
  • Sora 2可视化性能瓶颈全图谱,含TensorRT加速对比表、显存占用热力图与帧率衰减曲线
  • qmcdump终极指南:如何一键解锁QQ音乐加密格式,让音乐自由播放 [特殊字符]
  • ArkUI -- 状态管理的更新机制
  • DistroAV完整指南:如何通过NDI技术实现OBS Studio网络视频传输
  • 三步解锁:Mac用户如何零成本解决跨平台局域网通信难题
  • AI写论文哪个好用?2026年5款AI写论文工具指南,避开知网查重常见问题!
  • Gemini流式响应在Go中的零拷贝处理术:降低GC压力68%,吞吐提升2.3倍
  • Claude长文本处理卡顿诊断指南(含火焰图分析+KV Cache内存泄漏定位工具链)
  • 如何使用Legacy iOS Kit实现旧款iOS设备降级与越狱的完整指南
  • AbMole丨Rocaglamide:一种能调控翻译起始与细胞应激反应的天然产物
  • 第十三周学习
  • Rio框架:用纯 Python 搞定前后端,构建现代化 Web 与桌面应用