首页 > 其他分享 >#yyds干货盘点#vue框架computed的原理

#yyds干货盘点#vue框架computed的原理

时间:2022-12-08 23:01:59浏览次数:42  
标签:yyds vue computed 收集 对象 data 属性

computed 原理,首先得讲 vue 响应式原理,因为 computed 的实现是基于 ​​Watcher​​​ 对象的。 那么 vue 的响应式原理是什么呢?众所周知,vue 是基于 ​​Object.defineProperty​​ 实现监听的。在 vue 初始化数据 data 和 computed 数据过程中。会涉及到以下几个对象:

  • ​Observe​​ 对象(观察者)
  • ​Dep​​ 对象(订阅者)
  • ​Watch​​​ 对象 ​​Observe​​ 对象是在 data 执行响应式时候调用,因为 computed 属性基于响应式属性,所以其不需要创建 Observe 对象。 Dep 对象主要功能是做依赖收集,有个属性维护多个 Watch 对象,当更新时候循环调用每个 Watch 执行更新。 Watch 对象主要是用于更新,而且是收集的重点对象。


computed的两种定义方式

这里谈到 computed 计算属性,首先要知道,其有两种定义方式。

一种是方法,另一种是 ​​get,set​​ 属性。而且,其内部监听的对象必须是已经定义响应式的属性,比如 data 的属性、vuex 的属性。

vue 在创建 computed 属性时候,会循环所有计算属性,每一个计算属性会创建一个 watch,并且在通过 ​​defineProperty​​ 定义监听,在 get 中,计算属性工作是做依赖收集,在 set 中,计算属性重要工作是重新执行计算方法,这里需要多补充一句,因为 computed 是懒执行,也就是说第一次初始化之后,便不会执行计算,下一次变更执行重新计算是在 set 中。


依赖收集的时机

另一个补充点是依赖收集的时机,computed 收集时机和 data 一样,是在组件挂载前,但是其收集对象是自己属性对应的 watch,而 data 本身所有数据对应一个 watch。


标签:yyds,vue,computed,收集,对象,data,属性
From: https://blog.51cto.com/u_11365839/5923555

相关文章

  • #yyds干货盘点#css样式vh屏幕高度
    众所周知,在从css3中,vh和wh指的是浏览器可见区域。1vw等于视窗总宽度的1%1vh等于视窗总高度的1%移动端使用vh遇到的问题由于,各种浏览器的计算高度不一样,譬如Safari浏览......
  • Vue滑块验证
    登陆时加入滑块验证1、在src\components新建SilderVerify\index.vue文件<template><divclass="silder-range":class="rangeStatus?'success':''"><i@mousedo......
  • vue实现自定义字体库
      先看效果是不是你所需要的,再看具体如何实现。   效果如下图所示:         有些字体需要下载,用图片就会变得很不清楚,这样我们就需要去下载字......
  • Vue2.0 中使用Less
    第一步  npm安装lessnpminstalllessless-loader--save 第二步 修改webpack.base.conf.js文件,配置loader加载依赖,让其支持外部的less,在原来的代码上添加如下......
  • Vue刷新后页面数据丢失问题的解决过程
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • vue3.0 父组件显示子组件中的echarts,同时保证宽高自适应。
    目录vue3.0父组件显示子组件中的echarts,同时保证宽高自适应。el-card控件中的echarts进行填充布局示例代码vue3.0父组件显示子组件中的echarts,同时保证宽高自适应。父......
  • vue常用依赖(一)vue-json-viewer展示JSON格式数据
    项目需求:将后台返回的字符串展示为Json格式且美化1.下载//Vue2npminstallvue-json-viewer@2--save//Vue3npminstallvue-json-viewer@3--save2.引入并全局注......
  • cpolar + vue内网穿透配置事项
    场景开了内网穿透之后,本地跑的项目就不需要内网也能访问了。这里用的工具是cpolar,简单,快速上手,有低配免费套餐,能够搭载小型项目,大型项目可能会有请求高并发的情况,这时候......
  • VUE element-ui表格 实现滚动到底部加载更多数据
    原文链接:https://blog.51cto.com/u_15301254/4842790vue:<el-tableheight="600":data="visibleData"......
  • #yyds干货盘点# 名企真题专题:交叉线
    1.简述:描述大M布置给小M一个题目:首先给出n个在横坐标上的点,然后连续的用半圆连接他们:首先连接第一个点与第二点(以第一个点和第二点作为半圆的直径)。然后连接第二个第三个......