Vue3 响应式原理

何为响应? 当我依赖你的时候, 你变我也变
当数据发生变化, 如果页面的某个地方使用到了这个数据, 那么该页面的内容也会跟着发生变化

在 vue3 中 参考 Vue3 源码流程图
在这里插入图片描述

// 该函数的目的就是		更新页面
const componentUpdateFn = () => {
   
	// ...
}

该函数的目的就是更新页面

也就是说, 当数据发生变化的时候, 就会运行 componentUpdateFn 这个函数

如何做到? 源码如下

const effect = new ReactiveEffect(
  componentUpdateFn,
  () => queueJob(instance.update),
  instance.scope // track it in component's effect scope
)

将更改页面的函数, 也就是 componentUpdateFn, 放入到 ReactiveEffect

// 全局 effect 栈
const effectStack: ReactiveEffect[] = []
// 当前激活的 effect
let activeEffect: ReactiveEffect | undefined

class ReactiveEffect<T = any> {
   
  active = true
  deps: Dep[] = []
  
  constructor(
    public fn: () => T,
    public scheduler: EffectScheduler | null = null,
    scope?: EffectScope | null
  ) {
   
    recordEffectScope(this, scope)
  }

  run() 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值