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

南宁做网站开发的公司深圳品牌seo

南宁做网站开发的公司,深圳品牌seo,软件开发好做吗,镇江市丹徒区建设局网站目录 1,简单对比2,原理的不同1,method 的处理2,computed 的处理实现缓存触发更新 3,触发更新时的问题 1,简单对比 computed 当做属性使用,method 当做方法使用。computed 可以提供 getter 和 s…

目录

  • 1,简单对比
  • 2,原理的不同
    • 1,method 的处理
    • 2,computed 的处理
      • 实现缓存
      • 触发更新
  • 3,触发更新时的问题

1,简单对比

  1. computed 当做属性使用,method 当做方法使用。
  2. computed 可以提供 getter 和 setter 来赋值。
  3. computed 无法接收多个参数。
  4. computed 有缓存。

2,原理的不同

1,method 的处理

处理比较简单,只需要遍历 methods 配置的每个属性,将其对应的函数通过 bind 绑定到当前实例。之后复制其引用到组件实例即可(为了通过 this 可访问)。

// 伪代码
function Vue(options) {// ...// 其他代码// ...Object.entries(options.methods).forEach(([methodName, fn]) => {this[methodName] = fn.bind(this);});
}new Vue(vnode.componentOptions);

2,computed 的处理

在触发组件的生命周期函数 beforeCreate后,会做一系列的事情,其中包括对 computed 的处理:

  1. 遍历 computed 配置中的所有属性,对每个属性都创建一个 Watcher 对象,并传入一个函数。该函数本质上就是 computedgetter。之后 getter 触发时就会收集依赖。

数据响应式中 Watcher 原理参考。
简单来说,为了监听响应式数据的变化来触发更新,Vue 会将使用了响应式数据的函数(模板对应 render 函数)通过 Watcher 记录下来(收集依赖)。之后响应式数据发生变化,就会通知对应的 Watcher 来执行对应的函数触发更新。

  1. Watcher 创建好之后,vue 会使用代理模式,将计算属性挂载到组件实例上(为了通过 this 访问)。

  2. 不同于渲染函数 renderWatcher,为计算属性创建的 Watcher 不会立即执行。因为要考虑该计算属性是否被使用(渲染函数或其他方法中),没使用就不会执行。所以在创建 Watcher 时配置了一个 lazy 属性,lazy === trueWatcher 不会立即执行。

实现缓存

  1. 受到 lazy 的影响,Watcher 内部还会配置2个属性:valuedirty

    • value,保存 Watcher 运行时的结果,一开始(Watcher 还没有执行时)为 undefined
    • dirty,标记当前 value 是否过期,一开始为 true
  2. 当读取计算属性时,会先检查 dirty

    • true 时则运行之前传入 Watcher 的函数(也就是计算属性的 getter),将计算依赖得到的值保存在 Watchervalue 中,同时设置 dirty = false
    • false,则直接返回 Watcher.value,也就是缓存的值。

触发更新

  1. 为了实现更新,在收集依赖时,被依赖的数据不仅会收集计算属性的 Watcher还会收集组件的 Watcher

  2. 当计算属性变化时,会先触发计算属性的 Watcher,但只会将 dirty = true,其他不做处理。之后触发组件的 Watcher 重新渲染。render 函数(或模板)又读取了计算属性,因为dirty === true,所以会重新运行 getter 计算。

  3. 设置计算属性时比较简单,直接运行 setter 即可。

3,触发更新时的问题

注意到上面触发更新时,如果计算属性的依赖发生变化,但计算属性没有在模板(或render函数)中使用时(其他方法或watch场景同理),虽然会触发计算属性的 Watcher,但不会触发同时收集到的组件的 Watcher

举例:

<template><div><h1 v-if="showName">{{ fullName }}</h1><button @click="handleClick">隐藏 fullName</button></div>
</template><script>
export default {data() {return {firstName: '渣渣',lastName: '辉',showName: true}},computed: {fullName: {get() {return this.firstName + ' ' + this.lastName},set(newValue) {;[this.firstName, this.lastName] = newValue.split(' ')}}},methods: {handleClick() {this.firstName = '123' // 计算属性依赖发生变化this.showName = !this.showName}},updated() {console.log(this)}
}
</script>

showName === false 所以不渲染 h1,所以render 函数不会读取计算属性 fullName

所以只会执行:

计算属性的依赖:
firstName: [计算属性的 Watcher,组件的 Watcher(对应render函数 )]
lastName: [计算属性的 Watcher,组件的 Watcher(对应render函数)]
showName: [组件的 Watcher]

动图展示


以上。

http://www.mnyf.cn/news/40314.html

相关文章:

  • 做网站用dramwaver还是vs站长之家是什么
  • 学网站建设有前途吗如何广告推广
  • 贵州省住房与城乡建设厅网站最靠谱的十大教育机构
  • b2b商务网站有哪些上海百度推广方案
  • 定制版app高明搜索seo
  • 义乌本地网站开发百度网址导航
  • vr全景网站开发sem账户托管公司
  • 专用车网站建设哪家好如何快速收录一个网站的信息
  • 西安攻略旅游自由行怎么玩湖北seo网站推广
  • 制造行业网站建设网页设计框架图
  • 专门做电商的招聘网站外包公司为什么没人去
  • 建设网站具体步骤百度网页版下载安装
  • 长沙网站搜索排名头条今日头条新闻
  • 绥化建设局网站百度投诉中心人工电话号码
  • 网站用户细分网络营销专业如何
  • e福州官方网站外贸营销
  • 国际摄影网站网络营销的核心
  • 做那个网站销售产品比较好内部搜索引擎优化
  • 怎么提高网站响应速度seo基础理论
  • 酒店招聘做的好的网站google下载官网
  • 福田公司旗下子公司深圳关键词优化报价
  • 网站做sem推广时要注意什么百度网站推广价格
  • 在线crm系统功能模块分析整站优化加盟
  • 湖南seo推广方法seo优化搜索推广
  • 记事本做网站背景百度联盟推广
  • php教育学校网站源码搜索关键词分析
  • 网站建设费钱吗seo搜索引擎优化关键词
  • 做盗版电影网站赚钱青岛seo服务
  • 自己做的网站为何手机不能浏览常见的网站推广方式有哪些
  • 做网站排名有用吗seo网站优化详解