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

《Vue进阶教程》第二十课:lazy懒执行

 往期内容:

《Vue进阶教程》第九课:watch()函数的高级使用

《Vue进阶教程》第十课:其它函数

《Vue进阶教程》第十一课:响应式系统介绍

《Vue进阶教程》第十二课:实现一对多

《Vue进阶教程》第十三课:实现依赖收集

《Vue进阶教程》第十四课:改进桶结构

《Vue进阶教程》第十五课:深入完善响应式系统之模块化

《Vue进阶教程》第十六课:深入完善响应式系统之单例模式

《Vue进阶教程》第十七课:支持分支切换

《Vue进阶教程》第十八课:避免死循环

《Vue进阶教程》第十九课:computed初步实现

1) 什么是懒执行

对计算属性而言, 默认不会执行计算方法(副作用函数). 只有访问其value属性时, 才会执行计算方法

使用示例

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="./vue.js"></script>
  </head>
  <body>
    <script>
      const { reactive, computed } = Vue
      const state = reactive({ firstname: 'xiao', lastname: 'ming' })

      const fullname = computed(() => {
        console.log('默认不执行, 只有当访问fullName.value时执行')
        return state.firstname + state.lastname
      })

      setTimeout(() => {
        fullname.value
      }, 1000)
    </script>
  </body>
</html>

2) 具体实现
在我们自己写的源码中, 每次在注册副作用函数时, 默认都会执行一次.
解决方案
为了解决上述问题.
可以考虑给注册副作用函数effect加入配置项, 扩展effect的功能, 控制是否需要在注册时立该执行副作用函数

修改effect

function effect(fn, options = {}) {
  if (typeof fn !== 'function') return

  const _effect = new RectiveEffect(fn)

  if (!options.lazy) _effect.run() // 修改

  return _effect
}

在计算属性中注册副作用函数时, 加入lazy:true的配置项, 表明注册时不需要立即执行

优化computed

function computed(fn) {
  // 这里先只考虑fn是函数的情况

  const _effect = effect(fn, {
    lazy: true, // 修改
  })

  return {
    get value() {
      return _effect.run()
    },
  }
}


http://www.kler.cn/a/451761.html

相关文章:

  • css改变输入右下角图标
  • ROSboard:为您的机器人提供强大的Web可视化工具
  • 亚信安全举办“判大势 悟思想 强实践”主题党日活动
  • 详解磁盘IO、网络IO、零拷贝IO、BIO、NIO、AIO、IO多路复用(select、poll、epoll)
  • 帧缓存的分配
  • vue中proxy代理配置(测试二)
  • HDMI、MIPI、DP的区别和用途
  • Spring_05_IOC容器启动细节
  • 亚信安全与方天股份达成战略合作,双向奔赴助力数字化转型
  • vue3入门教程:reactive函数
  • 04、Vue与Ajax
  • Neo4j Desktop 无法打开
  • 字符编码(二)
  • V900新功能-电脑不在旁边,通过手机给PLC远程调试网关配置WIFI联网
  • Info.plist contained no UIScene configuration dictionary (looking for configura
  • What‘s the term “unused memory“ in PyTorch?
  • 16爬虫:使用requests和scrapy分别从链家获取二手房信息
  • 什么是微端游戏?微端应该选择什么配置的服务器?
  • 2024 Gartner 数据库魔力象限概要解读
  • js和html中,将Excel文件渲染在页面上
  • vue3封装而成的APP ,在版本更新后,页面显示空白
  • 2024年种子轮融资趋势:科技引领,消费降温
  • 【理解机器学习中的过拟合与欠拟合】
  • 前端Pako.js 压缩解压库 与 Java 的 zlib 压缩与解压 的互通实现
  • 关于科研中使用linux服务器的集锦
  • 指数函数与累积效应——数学模型