vue响应式原理剖析

一、什么是响应式?

我们先来看一下响应式意味着什么?我们来看一段代码:

  • m有一个初始化的值,有一段代码使用了这个值;

  • 那么在m有一个新的值时,这段代码可以自动重新执行;

let m = 20
console.log(m)
console.log(m * 2)m = 40

上面的这样一种可以自动响应数据变量的代码机制,我们就称之为是响应式的。

那么我们再来看一下对象的响应式:

// 对象的响应式
const obj = {name: "wqx",age: 18
}// 修改obj对象
obj.name = "kobe"
obj.age = 20

二、响应式函数设计

首先,执行的代码中可能不止一行代码,所以我们可以将这些代码放到一个函数中:

  • 那么我们的问题就变成了,当数据发生变化时,自动去执行某一个函数;

在这里插入图片描述

但是有一个问题:在开发中我们是有很多的函数的,我们如何区分一个函数需要响应式,还是不需要响应式呢?

  • 很明显,下面的函数中 foo 需要在obj的name发生变化时,重新执行,做出响应;

  • bar函数是一个完全独立于obj的函数,它不需要执行任何响应式的操作;

const obj = {name: "wqx",age: 18
}function foo() {console.log(obj.name)console.log(obj.age)
}function bar() {console.log(obj.age + 100)
}

三、响应式函数的实现watchFn

但是我们怎么区分呢?

  • 这个时候我们封装一个新的函数watchFn
  • 凡是传入到watchFn的函数,就是需要响应式的;
  • 其他默认定义的函数都是不需要响应式的;
const obj = {name: "why",age: 18
}// function foo() {
//   console.log("foo:", obj.name)
//   console.log("foo", obj.age)
//   console.log("foo function")
// }// function bar() {
//   console.log("bar:", obj.name + " hello")
//   console.log("bar:", obj.age + 10)
//   console.log("bar function")
// }// 设置一个专门执行响应式函数的一个函数
const reactiveFns = []
function watchFn(fn) {reactiveFns.push(fn)fn()
}watchFn(function foo() {console.log("foo:", obj.name)console.log("foo", obj.age)console.log("foo function")
})watchFn(function bar() {console.log("bar:", obj.name + " hello")console.log("bar:", obj.age + 10)console.log("bar function")
})// 修改obj的属性
console.log("name发生变化-----------------------")
obj.nam

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/41570.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UDP数据报套接字编程

1.DatagramSocket API Socket是操作系统中的一个概念 本质上是一种特殊的文件 Socket就属于是把"网卡"这个设备,抽象成文件了 往Socket文件中写数据,就相当于通过网卡发送数据 从Socket文件读数据,就相当于通过网卡接受数据 在Java中就使用DatagramSocket这个类…

逼用户升级Win11,微软开始给Win10限速

随着Windows10的支持时间越来越短,微软也加大了对Win10用户的驱赶力度。 最近,微软官宣了将要在今年6月份降低OneNote for Windows 10的同步速度。软件也将和Windows10在今年的10月14日一同停止支持和维护。 这将影响实时协作和多设备访问。 对OneNote…

NodeJs之http模块

一、概念: 1、协议:双方必须共同遵从的一组约定。 Hypertext Transfer Protocol:HTTP,超文本传输协议 2、请求: ① 请求报文的组成: 请求行请求头空行请求体 ② 请求行:

26考研——图_图的应用(6)

408答疑 文章目录 四、图的应用图的应用考查形式最小生成树最小生成树概念最小生成树的性质最小生成树中某顶点到其他顶点是否具有最短路径的分析构造最小生成树的算法Prim 算法Prim 算法概述Prim 算法的构建思想Prim 算法的步骤Prim 算法的示例Prim 算法的性质 Kruskal 算法Kr…

Photoshop 2025安装包下载及Photoshop 2025详细图文安装教程

文章目录 前言一、Photoshop 2025安装包下载二、Photoshop 2025安装教程1.解压安装包2.运行程序3.修改安装路径4.设安装目录5.开始安装6.等安装完成7.关闭安装向导8.启动软件9.安装完成 前言 无论你是专业设计师,还是初涉图像处理的小白,Photoshop 2025…

MySQL-存储过程

介绍 基本语法 创建 调用 查看 删除 变量 系统变量 查看 设置 用户定义变量 赋值 使用 局部变量 声明 赋值 流程控制 参数 条件结构 IF case 循环结构 while repeat loop 游标 条件处理程序 介绍 举个简单的例子,我们先select某数据&…

debug 笔记:llama 3.2 部署bug 之cutlassF: no kernel found to launch!

1 问题描述 按照官方的写法 import torch from transformers import pipeline import os os.environ["HF_TOKEN"] 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 model_id "meta-llama/Llama-3.2-3B"pipe pipeline("text-generation", modelmode…

《Python实战进阶》No34:卷积神经网络(CNN)图像分类实战

第34集:卷积神经网络(CNN)图像分类实战 摘要 卷积神经网络(CNN)是计算机视觉领域的核心技术,特别擅长处理图像分类任务。本集将深入讲解 CNN 的核心组件(卷积层、池化层、全连接层)…

【银河麒麟系统常识】命令:uname -m(查看系统架构)

命令: uname -m 功能 常用的 Linux/Unix 终端命令,用于显示当前系统的硬件架构; 返回 返回系统的CPU架构类型,用于判断软件兼容性; 输出结果架构说明常见设备x86_64Intel/AMD 64位 CPU主流 PC、服务器aarch64ARM 64位 …

游戏引擎学习第183天

回顾和今天的计划 我对接下来的进展感到非常兴奋。虽然我们可能会遇到一些问题,但昨天我们差不多完成了将所有内容迁移到新的日志系统的工作,我们正在把一些内容整合进来,甚至是之前通过不同方式记录时间戳的旧平台层部分,现在也…

Redisson 实现分布式锁简单解析

目录 Redisson 实现分布式锁业务方法:加锁逻辑LockUtil 工具类锁余额方法:工具类代码枚举代码 RedisUtil 工具类tryLock 方法及重载【分布式锁具体实现】Supplier 函数式接口调用分析 Redisson 实现分布式锁 业务方法: 如图,简单…

鸿蒙Flutter实战:19-Flutter集成高德地图,跳转页面方式

前言 在之前的文章现有Flutter项目支持鸿蒙II中,介绍了如何使用第三方插件,同时给出了非常多的使用案例,如 flutter_inappwebview,video_player, image_picker 等,本文将开始介绍如何集成高德地图。 整体方案 通过 …

26考研——图_图的代码实操(6)

408答疑 文章目录 五、图的代码实操图的存储邻接矩阵结构定义初始化插入顶点获取顶点位置在顶点 v1 和 v2 之间插入边获取第一个邻接顶点获取下一个邻接顶点显示图 邻接表结构定义初始化图插入顶点获取顶点位置在顶点 v1 和 v2 之间插入边获取第一个邻接顶点获取下一个邻接顶点…

力扣32.最长有效括号(栈)

32. 最长有效括号 - 力扣&#xff08;LeetCode&#xff09; 代码区&#xff1a; #include<stack> #include<string> /*最长有效*/ class Solution { public:int longestValidParentheses(string s) {stack<int> st;int ans0;int ns.length();st.push(-1);fo…

Node.js 下载安装及环境配置教程、卸载删除环境配置超详细步骤(附图文讲解!) 从零基础入门到精通,看完这一篇就够了

Node.js 安装 一、进入官网地址下载安装包 Node.js — Download Node.js 选择对应你系统的Node.js版本&#xff0c;这里我选择的是Windows系统、64位 Tips&#xff1a;如果想下载指定版本&#xff0c;点击【以往的版本】&#xff0c;即可选择自己想要的版本下载 二、安装程序…

SQLark导出功能详解|轻松管理数据库数据与结构

SQLark 作为一款数据库管理工具&#xff0c;为用户提供了丰富且实用的导出功能。在数据库管理与开发过程中&#xff0c;数据及结构的导出操作至关重要&#xff0c;关乎数据的迁移、备份、版本管理以及问题定位等诸多关键环节。接下来&#xff0c;让我们深入了解 SQLark 的导出功…

搭建Redis主从集群

主从集群说明 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离。 主从结构 这是一个简单的Redis主从集群结构 集群中有一个master节点、两个slave节点&#xff08;现在叫replica&#xff09;…

自然语言处理(NLP)技术的应用面有哪些

自然语言处理&#xff08;NLP&#xff09;技术在各个领域都有广泛的应用&#xff0c;以下是一些常见的例子&#xff1a; 机器翻译&#xff1a;NLP技术用于开发翻译系统&#xff0c;可以将一个语言的文本自动翻译成另一种语言。例如&#xff0c;谷歌翻译就是一个应用了NLP技术的…

element-plus 的简单应用

前言 本篇博客是 基于 ElementPlus 快速入门_element plus x-CSDN博客 的进阶 最终成果 完成的要求 1 深入学习 设计 | Element Plus 从里面找自己合适的 使用到的 组件有&#xff1a;表格&#xff0c;分页条&#xff0c;表单&#xff0c;卡片 2 具备 前端基础&#xff08;ht…

关于Qt的各类问题

目录 1、问题&#xff1a;Qt中文乱码 2、问题&#xff1a;启动时避免ComBox控件出现默认值 博客会不定期的更新各种Qt开发的Bug与解决方法,敬请关注! 1、问题&#xff1a;Qt中文乱码 问题描述&#xff1a;我在设置标题时出现了中文乱码 this->setWindowTitle("算法…