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

Vue响应式原理一:认识响应式逻辑

  1. 核心思想:当数据发生变化时,依赖该数据的代码能够自动重新执行
  2. Vue中的应用:在data或ref/reactive中定义的数据,当数据变化时template会自动更新
  3. template的本质: 是render()函数, 用变化之后的数据重新执行render()函数, 形成新的VNode, 然后对比新旧的VNode,这就是diff算法的一个事情, 然后决定那个VNode需要做实际的dom更新操作

1. 响应式意味着什么?

  1. 基本示例:
    // 响应式原理:初始化一个num值,当num值发生变化时,依赖num的代码会自动重新执行,称之为响应式的
    let num = 100;console.log(num *  2);
    console.log(num * num);num = 200
    
  2. 本质特征:数据变化 → 依赖代码自动执行

2. 对象响应式

  1. 实际开发中更多处理对象响应式
    // 对象的响应式 
    const obj = { name: 'bar', age: 18
    }// 当obj.name变化时,只重新执行依赖name的代码console.log(obj.name);// 当obj.age变化时,只重新执行依赖age的代码console.log(obj.age);
    
  2. 精准响应:
    • 当obj.name变化时,只重新执行依赖name的代码
    • 当obj.age变化时,只重新执行依赖age的代码
  3. 依赖收集:需要自动识别哪些代码依赖了对象的哪些属性

3. 响应式函数设计

  1. 函数封装:
    • 将依赖代码封装成函数: function foo(){console.log(obj.name)}
    • 当数据变化时执行对应函数
  2. 是否需要响应式:
    • 需要响应式的函数:内部使用了响应式数据
    • 不需要响应式的函数:完全独立于响应式数据
    • Vue类比:类似于template最终转为render函数,数据变化时重新执行render
    •    	// 对象的响应式 const obj = { name: 'bar', age: 18}//当obj.name和obj.age发生改变的时候,重新执行foo()和bar()// 把所有依赖对象obj的代码封装起来,function  foo () { // 响应式函数console.log(obj.name);console.log(obj.age);} function bar () {  // 响应式函数console.log(obj.age + 100);}// 修改obj对象obj.name = 'kobe'   ```
      
    1. 核心机制:
      • 建立数据与函数的依赖关系
      • 数据变化时触发对应函数执行
    2. 实现要点:
      • 自动收集依赖关系
      • 精准触发更新(只触发真正依赖变化的函数)
    3. Vue原理:
      • 通过Proxy/Object.defineProperty监听数据变化
      • 建立"数据属性-依赖函数"的映射关系
      • 变化时通过映射关系找到并执行对应函数
http://www.xdnf.cn/news/15139.html

相关文章:

  • 【51单片机累计的时间为1分30秒时蜂鸣器叫】2022-7-29
  • VR重现红军过雪山:一场穿越时空的精神洗礼​
  • uniapp AndroidiOS 定位权限检查
  • 图像处理中的凸包检测:原理与实现
  • Protable 问题记录
  • 神经网络简介
  • [IMX][UBoot] 13.Linux 内核源码目录分析
  • 【Linux】权限的概念及理解
  • 【RK3568+PG2L50H开发板实验例程】FPGA部分 | 以太网传输实验例程
  • RabbitMQ 4.1.1-Local random exchange体验
  • 【linux】ssh使用-X参数后报错:X11 forwarding request failed on channel 0
  • 深度学习 最简单的神经网络 线性回归网络
  • Python-文件操作-StringIO和BytesIO-路径操作-shutil模块-csv,ini序列化和反序列化-argparse使用-学习笔记
  • 蛋白质序列-kappa参数计算算法解读
  • 苍穹外卖项目日记(day04)
  • qt-C++笔记之布局管理`space` 和 `margin`的区别
  • 基于pytorch.nn模块实现线性模型
  • c语言中的数组II
  • OpenCV图片操作100例:从入门到精通指南(4)
  • (C++)任务管理系统(正式版)(迭代器)(list列表基础教程)(STL基础知识)
  • Android-重学kotlin(协程源码第一阶段)新学习总结
  • STM32-看门狗
  • (5)机器学习小白入门 YOLOv:数据需求与图像不足应对策略
  • qml加载html以及交互
  • Qt去噪面板搭建
  • Flutter基础(前端教程⑦-Http和卡片)
  • 【EGSR2025】材质+扩散模型+神经网络相关论文整理随笔(二)
  • 图片的拍摄创建日期怎么改?保护好图片信息安全的好方法
  • 李宏毅NLP-9-语音转换
  • 全球发展币GDEV:从中国出发,走向全球的数字发展合作蓝图