《Vue进阶教程》第七课:computed()函数详解(下)

news/2024/12/17 2:09:02/

 往期内容:

《Vue零基础入门教程》合集(完结)

《Vue进阶教程》第一课:什么是组合式API

《Vue进阶教程》第二课:为什么提出组合式API

《Vue进阶教程》第三课:Vue响应式原理

《Vue进阶教程》第四课:reactive()函数详解

《Vue进阶教程》第五课:ref()函数详解(重点)

《Vue进阶教程》第六课:computed()函数详解(上)

4) 基于effect实现computed

基本实现

从computed()函数的使用上分析

computed()函数的参数是一个副作用函数, 依赖响应式对象

computed()函数跟注册副作用函数effect()类似. 接收一个副作用函数做为参数

<!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="../node_modules/vue/dist/vue.global.js"></script></head><body><script>const { ref, effect } = Vuefunction computed(fn) {// 只考虑参数是fn的情况const run = effect(fn)return {get value() {return run()},}}const firstname = ref('xiao')const lastname = ref('ming')const fullname = computed(() => {console.log('副作用函数被执行了...')return firstname.value + lastname.value})</script></body>
</html>

实现懒执行

<!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="../node_modules/vue/dist/vue.global.js"></script></head><body><script>const { ref, effect } = Vuefunction computed(fn) {// 只考虑参数是fn的情况const run = effect(fn, { lazy: true })return {get value() {return run()},}}const firstname = ref('xiao')const lastname = ref('ming')const fullname = computed(() => {console.log('副作用函数被执行了, 值是:',firstname.value + lastname.value)return firstname.value + lastname.value})</script></body>
</html>

实现缓存

<!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="../node_modules/vue/dist/vue.global.js"></script></head><body><script>const { ref, effect } = Vuefunction computed(fn) {let cachelet dirty = true// 只考虑参数是fn的情况const run = effect(fn, {lazy: true,shecduler: () => {dirty = true},})return {get value() {if (dirty) {cache = run()dirty = false}return cache},}}const firstname = ref('xiao')const lastname = ref('ming')const fullname = computed(() => {console.log('副作用函数被执行了, 值是:',firstname.value + lastname.value)return firstname.value + lastname.value})</script></body>
</html>

http://www.ppmy.cn/news/1555736.html

相关文章

我在广州学 Mysql 系列之 数据“表”的基本操作

ℹ️大家好&#xff0c;我是&#x1f606;练小杰&#xff0c;今天主要讲得是Mysql数据表的基本操作内容~~ 昨天讲了“Mysql 数据“库“的基本操作”~~ 想要了解更多&#x1f236;️MYSQL 数据库的命令行总结&#xff01;&#xff01;&#xff01; “真相永远只有一个”——工藤…

【Redis】Redis 缓存更新策略

1. 更新策略三种方式 缓存更新是redis为了节约内存而设计出来的一个东西&#xff0c;主要是因为内存数据宝贵&#xff0c;当我们向redis插入太多数据&#xff0c;此时就可能会导致缓存中的数据过多&#xff0c;所以redis会对部分数据进行更新&#xff0c;或者把他叫为淘汰更合…

私有云dbPaaS为何被Gartner技术成熟度曲线标记为“废弃”?

当云计算席卷而来&#xff0c;基于云基础设施的数据库部署也改变了数据库。在传统的私有化部署&#xff08;On-premises&#xff09;和公有云部署&#xff08;Public Cloud&#xff09;之间&#xff0c;不断融合的混合IT&#xff08;Mixed IT&#xff09;形式成为最常见的企业级…

[计算机网络]IP地址推行的“书同文,车同轨”

硬件地址无法直接转换的故事 在很久很久以前&#xff0c;网络世界就像一个庞大的帝国&#xff0c;各个村落&#xff08;网络&#xff09;都有自己的语言&#xff08;硬件地址&#xff09;。每个村落都有自己的规则和习惯&#xff0c;村里的每户人家&#xff08;设备&#xff0…

矩阵翻转与旋转——模板大全

目录&#x1f448;(&#xff9f;ヮ&#xff9f;&#x1f448; 前言一、 基础操作代码实现1. 左右反转&#xff08;通用&#xff09;2. 上下反转&#xff08;通用&#xff09;3. 矩阵转置 二、组合操作实现复杂变换4. 90度顺时针旋转5. 180度顺时针旋转&#xff08;通用&#xf…

Scala的模式匹配变量类型

在Scala模式匹配中&#xff0c;可以匹配多种变量类型。 基本数据类型 - 数值类型&#xff1a;像 Int 、 Double 等。例如&#xff0c;对一个 Double 类型变量进行匹配&#xff1a; scala val num: Double 3.14 num match { case i: Int > println("是整数") ca…

Vue3+Node中使用webrtc推流至mediamtx

前言 项目的 Web 端是 Vue3 框架&#xff0c;后端是 GO 框架。需要实现将客户端的本地摄像头媒体流推送至服务端&#xff0c;而我自己从未有媒体流相关经验&#xff0c;最初 leader 让我尝试通过 RTSP 协议推拉流&#xff0c;我的思路就局限在了 RTSP 方向。 最初使用的服务端…

图论【Lecode_HOT100】

文章目录 1.岛屿数量No.2002.腐烂的橘子No.9943.课程表No.2074.实现Trie&#xff08;前缀树&#xff09;No.208 1.岛屿数量No.200 class Solution {public int numIslands(char[][] grid) {if (grid null || grid.length 0) {return 0;}int numIslands 0;int rows grid.len…