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

Vue的computed大致细节

computed

  • computed
    • 具体实现流程
    • computer的执行顺序

computed

具体实现流程

  1. computer内部首先是标准化参数
  2. 然后调用runner函数进行依赖收集
  3. 设置dirty为true
  4. 创建副作用函数,具体如下
const runner = effect(getter,{//延迟执行lazy:true,//标记为computed effect 用于咋trigger阶段的优先级排序computed:true,//调度执行实现scheduler:() => {//如果dirty为true,则执行副作用函数if(dirty){//设置dirty为falsedirty = falsetrigger(computed,"set",'value')}}
})
  1. 创建computed对象,具体如下
computed = {_v_isRef:true,effect:runner,get value(){if(dirty){value = runner()dirty = false}track(computed,"get",'value')return value}set value(newValue){setter(newValue)}
}//最后
return computed

相关介绍

  • dirty默认是false,当依赖发送变化是会设置dirty为true,然后下一次执行get时会重新计算并设置dirty为false,得到新的value
  • dirty为false为,直接返回value
  • dirty为true时,会重新计算value并设置dirty为false,然后返回value

当computed被访问时会触发get

computer的执行顺序

runner大于普通effect函数

例题

import {effect } from '@vue/reactivity'
import {ref,computed} from 'vue'const count = ref(0)
const plusOne = computed(() => count.value +1)effect(() => {console.log(cont.value+plusOne.value)
})function increment() {count.value++
}increment() 

输出结果 : 1 3 3

主要原因时执行优先级不同,输出1就不解释了。先执行pluseOne的runner,将plusOne的runner的dirty设置为true,然后通知他的依赖effect,这时由于plusOne的dirty为true,所以会再次执行pluseOne的get拿到新值2,再加上1就得到了3,同时也会设置dirty为false,然后再次执行count普通effect依赖, 由于dirty为false再次输出3

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

相关文章:

  • 第5章:模型预测控制(MPC)的代码实现
  • 论文学习day01
  • Github入门教程,适合新手学习(非常详细)
  • C# OpenCvSharp 代数运算-add、scaleAdd、addWeighted、subtract、absdiff、multiply、divide
  • 为什么说Python 是胶水语言?
  • GitLab教程(二):快速上手Git
  • 结构体知识点
  • C# —— 显示转换
  • zip加密txt文件后,暴力破解时会有多个解密密码可以打开的疑问??
  • css入门宝典
  • 【AI原理解析】— 星火大模型
  • StarNet实战:使用StarNet实现图像分类任务(一)
  • 单链表——AcWing.826单链表
  • 10:Hello, World!的大小
  • 【Pandas驯化-03】Pandas中常用统计函数mean、count、std、info使用
  • WordPress——Argon主题美化
  • Vue部分文件说明
  • 图书管理系统(SpringBoot+SpringMVC+MyBatis)
  • 11.泛型、trait和生命周期(上)
  • UML与设计模式
  • 如何在Spring Boot中实现图片上传至本地和阿里云OSS
  • 几个小创新模型,KAN组合网络(LSTM、GRU、Transformer)时间序列预测,python预测全家桶...
  • ubuntu18.04 配置 mid360并测试fast_lio
  • 基于Java的诊所医院管理系统,springboot+html,MySQL数据库,用户+医生+管理员三种身份,完美运行,有一万一千字论文
  • gvm 在ubuntu下安装
  • ChatTTS开源项目推荐
  • java课设
  • 【持久层】PostgreSQL使用教程
  • OpenCV 4.10 发布
  • 5、斐波那契数列、跳台阶