Kros的博客 Kros的博客
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云

Kros

凡心所向,素履以往,生如逆旅,一苇以航
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云
  • CSS

  • JavaScript

  • 工具

  • Vue

  • antdv踩坑记录

  • Vue3

    • vue3 setup语法糖
    • vue3实现v-model
    • vue3组件通信
    • vue3使用pinia及pinia持久化
    • vue3使用$nextTick
    • Proxy的实际应用场景
    • ref和reactive的实现原理
      • vue3生命周期
      • 在vue文件外使用store
      • vue3中的编译器宏
      • vue3 ts中拼接本地图片地址
      • 数值滚动实现
      • setup语法糖下自定义组件name
      • vue-router4配置动态路由问题No match found for location with path
      • vue3挂载全局弹窗
      • vue3+vite配置环境变量问题
      • Vue3监听createApp创建的子组件事件
      • vue3源码学习——vue3核心模块
    • 前端
    • Vue3
    kros
    2023-06-12

    ref和reactive的实现原理

    ref和reactive都是vue3实现响应式的方法,具体可参考源码packages\reactivity\src\ref.ts和packages\reactivity\src\reactive.ts。 提起vue3的响应式大家首先想到的是Proxy,这里就有个误区,Proxy只能代理对象不能处理基础数据类型,所以才有了ref和reactive之分

    # ref

    ref实现相对简单,直接封装对象重写get和set方法,同样也是在get和set收集依赖和触发依赖 对象也可以使用ref,当传入对象是会默认将其转换成reactive的响应式,如果不需要转换可以参考shallowRef

     function ref(rawValue) {
        let _value = !isObject(rawValue) ? rawValue : reactive(rawValue) // 是否为对象
    
        return {
          get value() {
            track(this, 'value') // 收集依赖
            return _value
          },
          set value(newVal) {
            _value = !isObject(newVal) ? newVal : reactive(rawValue)
            trigger(this, 'value') // 触发
          }
        }
      }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    # reactive

    reactive实现就是Proxy那一套了

    function(target) {
      return new Proxy(target, {
        get: function(t, k) {
          track(t, k);      
          return Reflect.get(t, key);
        },
        set: function(t, k, v) {
          Reflect.set(t, k, v);
          trigger(t, k)
        }
      })
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    上次更新: 2025/09/05, 8:09:00
    Proxy的实际应用场景
    vue3生命周期

    ← Proxy的实际应用场景 vue3生命周期→

    最近更新
    01
    Find the next perfect square
    09-05
    02
    Regex validate PIN code
    09-05
    03
    Find the odd int
    09-05
    更多文章>
    Theme by Vdoing | Copyright © 2020-2025 kros king
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    icon-heart-o icon-heart icon-infinity icon-pause icon-play link next prev