vue3的api解读-VUE Reactivity

news2024/11/24 15:56:32

目录

响应式

命令式程序 vs 响应式程序

Be Reactive:将响应式的值绑定到UI

 代理模式(CODING)

/src/App.tsx

/src/main.ts

/vite.config.ts

/src/demo/ProxyExample.ts


Reactivity是Vue3新加的一个库,新的package

响应式

命令式程序 vs 响应式程序

// 命令式程序
function add(a, b) {
    return a + b
}
// 每一步都是赋值
let x = 1
let y = 2
let c = add(x, y)
x = 100
// c 不变,这就是命令式程序
// 响应式程序
// 每一步都是声明
let x = ref(1)
let y = ref(2)
let c = computed(
    () => x.value + y.value
)
x.value = 100
// c.value 102 ,响应式程序,c变了

响应式程序是一种声明

  • 命令式程序赋值,赋值的本质是内存的拷贝
  • 响应式程序是一种绑定(bind),绑定的本质是一种声明。
    • 比如数学公式a=b+1并不是计算过程,而是一种绑定

Be Reactive:将响应式的值绑定到UI

观察者模式

  • Get Value
    • Track(追踪用到的组件)
  • Value Changed
    • Trigger(触发通知所有用到的组件刷新)

 代理模式(CODING)

// 创建项目
npm create vite
vue
vue-ts
cd ***
npm install

删除App.vue

/src/App.tsx

export default () => {
  return <div>hello world vue3 + ts</div>
}

/src/main.ts

import { createApp } from 'vue'
import App from './App' // 去掉了.vue
createApp(App).mount('#app')
// 此时运行报错 React is not defined
// 解析出问题了
// 安装依赖
// npm add -D @vitejs/plugin-vue-jsx

/vite.config.ts

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// 安装依赖
// npm add -D @vitejs/plugin-vue-jsx
import jsx from '@vitejs/plugin-vue-jsx'
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue(), jsx()]
})

/src/demo/ProxyExample.ts

// vue原理 一个值的代理
function createRef<T>(val: T) { // T 泛型
  const obj = {
    get value() {
      // 追踪
      // track()
      return val
    },
    set value(v: T) {
      // 通知
      // trigger()
      console.log('set ... trigger')
      val = v
    }
  }
  return obj
}
// 创建的是一个值的代理
const count = createRef(0)
count.value = 1
// vue原理 一个对象的代理
function reactive<T extends object>(obj: T) {
  // MDN
  const proxy = new Proxy(obj, {
    // obj === target
    get(target, key) {
      // 一个标准,是JavaScript的反射,
      // 可以帮我们在原对象obj中拿到属性key
      // return () => { }// 返回一个函数也是可以的
      return Reflect.get(target, key)
    },
    set(target, key, value) {
      // 设置obj的值为value
      Reflect.set(target, key, value)
      return true
    }
  })
  return proxy
}
const state = reactive({ a: 1, b: 2 })
console.log(state.a)
state.b = 3
  • 代理模式: 代理对象是对原对象的包装(Wrapper)
  • 观察代理模式的程序示例
  • 思考:
    • 如何在get的时候track
    • 如何在set的时候trigger

小结:常见误区

思考1:

代理对象和原对象是一种怎样的关系?

  1. 代理对象不一定遵循原对象的逻辑,
  2. 代理对象可以有自己的逻辑,
  3. 本质上代理对象是对原对象的一种包装
  4. 因此代理模式也称为包装模式

思考2:

【vue2的数据绑定】Data binding和【vue3的响应式】Reactive的关系?

  1. 响应式是一种数据的绑定
  2. 响应式值和视图之间的关系是一种绑定关系,是声明式的绑定关系
  3. Reactive是实现Data binding的一种方式【一种机制】

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【软考系统规划与管理师笔记】第2篇 信息技术知识1

目录 1 软件工程 1.1 软件需求分析与定义 1.2 软件设计、测试与维护 1.3 软件质量保证及质量评价 1.4 软件配置管理 1.5 软件过程管理 1.6 软件复用 2 面向对象系统分析与设计 2.1 面向对象设计的基本概念 2.2统一建模语言与可视化建模 3. 应用集成技术 3.1 数据库与…

低代码平台中的分布式 RPC 框架 (约 3000 行代码)

RPC 是分布式系统设计中不可或缺的一个部分。国内开源的 RPC 框架很多&#xff0c;它们的设计大都受到了 dubbo 框架的影响&#xff0c;核心的抽象概念与 dubbo 类似。从今天的角度上看&#xff0c;dubbo 的设计已经过于繁琐冗长&#xff0c;如果基于现在的技术环境&#xff0c…

Go语言WEB开发[html/template包]

Go语言Web开发 Go语言提供了html/template包来支持模板渲染。Go提供的html/template包对HTML模板提供了丰富的模板语言&#xff0c;主要用于Web应用程序。 模板中的变量 模板中的变量通过{{.}} 来访问。 {{.}} 称为管道和root。 在模板文件内&#xff0c;{{.}}代表当前变量&…

【ROS】ROS2命令行工具详解

1、简介 ROS1中每个功能都使用ros开头的命令行工具&#xff0c;如&#xff1a;roscore、rosrun等 ROS2中只有一个命令行工具ros2&#xff0c;各个功能模块通过参数子命令来实现 ~$ ros2 -h 用法: ros2 [-h] [--use-python-default-buffering] <command> ……选项:-h, …

二叉树的认识

愚昧将使你达不到任何成果&#xff0c;并在失望和忧郁之中自暴自弃。 --达芬奇 目录 &#x1f341;一.二叉树的概念 &#x1f341;二.二叉树的特点&#xff0c;结构 &#x1f341;三.三种特殊的二叉树 &#x1f341;1.斜树 &#x1f341;2.满二叉树 …

Learning C++ No.24 【哈希/散列实战】

引言&#xff1a; 北京时间&#xff1a;2023/5/20/7:30&#xff0c;周六&#xff0c;可惜有课&#xff0c;而且还是早八&#xff0c;说明我们现在没有多少的学习时间啦&#xff01;得抓紧把该博客的引言给写完&#xff0c;我们距离期末考越来越近啦&#xff01;再过一个星期就…

客服系统搭建,这些技能你必须知道

作为客服系统领域的专家&#xff0c;我来为大家介绍一些客服系统搭建的技能。在本文中&#xff0c;你将了解到如何搭建一个高效的客服系统以及如何应对可能出现的问题。 选择合适的客服系统 在选择客服系统时&#xff0c;需要考虑以下几个因素&#xff1a; 处理的工单量用户…

《人月神话》译文修订明细(3)-读者可以对照修改

《人月神话》译文修订明细&#xff08;1&#xff09;-读者可以对照修改 《人月神话》译文修订明细&#xff08;2&#xff09;-读者可以对照修改 《人月神话》译文修订如下&#xff0c;读者可以对照自己手上的书修改。 相关阅读 这回真要动刀子-征集《人月神话》中译本的翻译…

java开发学习框架

Java基础 1.1. Java简介与安装 1.2. Java基本语法 1.3. 数据类型与变量 1.4. 运算符与表达式 1.5. 流程控制&#xff08;分支与循环&#xff09; 1.6. 数组 面向对象编程 2.1. 类与对象 2.2. 继承与多态 2.3. 接口与抽象类 2.4. 封装与访问控制 2.5. 重载与覆盖 2.6. Java内存管…

【面试题】 ES6中将非数组转换为数组的三种方法

大厂面试题分享 面试题库 前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 web前端面试题库 VS java后端面试题库大全 我们常常想使用数组的方法&#xff0c;比如forEach&#xff0c;filter&#xff0c;又或者so…

ChatGPT、Java 8 文档、MySQL都说 JDBC 没必要 `Class.forName()`,结果报错了……

文章目录 回顾 Tomcat 部署 WAR 应用报错找不到数据库驱动的问题ChatGPT、Javadoc 和 MySQL 驱动都说没必要 Class.forName()实验创建一个最小复现问题的 Demo不调用 Class.forName("com.mysql.cj.jdbc.Driver")调用 Class.forName("com.mysql.cj.jdbc.Driver&q…

chatgpt赋能python:Python的输出功能及其应用

Python的输出功能及其应用 Python是一种高级编程语言&#xff0c;它具有动态类型的解释性能力&#xff0c;是一种简洁、易于学习和易于阅读的编程语言。Python拥有非常强大的输出功能&#xff0c;使得开发者可以以多种形式输出数据结果&#xff0c;这对于数据分析、数据处理和…

人工智能值不值得学习?人工智能就业方向及前景

人工智能值不值得学习? 一、人工智能值得学吗&#xff1f; 很多同学想要知道人工智能值得学吗&#xff1f;小编认为是值得的&#xff0c;具体原因有以下两点&#xff1a; 1、人工智能专业前景好&#xff0c;但人才紧缺 根据人工智能行业的专家预计&#xff0c;到2020年&am…

华为CE12808/S9700交换机istack/CSS堆叠主备倒换操作命令步骤

一、华为CE12808交换机&#xff0c;istack堆叠状态 1、设备型号&#xff1a; 交换机一&#xff1a; HUAWEI CE12808 交换机二&#xff1a; HUAWEI CE12808 2、istack堆叠主备倒换操作步骤&#xff1a; 2.1、设备当前配置保存并进行备份。 2.2、切换所用命令。 执行命令display…

红黑树的插入。

一&#xff0c;一颗红黑树满足的性质 ①每个结点或是红色&#xff0c;或是黑色。 ②根结点是黑色的。 ③叶结点&#xff08;虚构的外部节点NULL结点&#xff09;都是黑色的。 ④不存在两个相邻的红结点。 ⑤对每个结点&#xff0c;从该结点到任一结点的简单路径上&#xff0c;…

【JavaSE】Java基础语法(二十):多态

文章目录 1. 多态的概述2 .多态中的成员访问特点3. 多态的好处和弊端4. 多态中的转型5. 多态中转型存在的风险和解决方案 (应用)6. 多态的实用价值 1. 多态的概述 什么是多态 同一个对象&#xff0c;在不同时刻表现出来的不同形态 多态的前提 要有继承或实现关系要有方法的重写…

SQLite 数据库入门教程(GO)

文章目录 SQLite数据库入门教程一、SQLite 简介1、什么是 SQLite&#xff1f;2、为什么要用 SQLite&#xff1f; 二、SQLite 安装1、在 Windows 上安装 SQLite2、在 Linux 、Mac OS上安装 SQLite 三、SQLite 命令四、SQLite 使用1、SQLite 数据类型2、SQLite 语法3、SQLite 可视…

chatgpt赋能python:Python百分比怎么算?-从基础到逐层深入

Python百分比怎么算&#xff1f; - 从基础到逐层深入 Python是目前全球最流行的编程语言之一&#xff0c;由于其易学易用的特点&#xff0c;广泛地应用于数据处理、Web开发、自动化测试等不同领域。当我们需要对一些数据进行计算和分析时&#xff0c;经常需要对百分比进行计算…

Linux第二天

上传 scp -r 本地文件路劲 用户名目标主机地址&#xff1a;路径 下载&#xff1a;scp -r 用户名目标主机地址&#xff1a;路径 本地目录 ls -A /root //查看root文件下所有的隐藏文件 命令&#xff1a;ls 选项&#xff1a; -l&#xff1a;查看文件属性 -h&#xff1a;文…

【Python】继承与多态

知识目录 一、写在前面✨二、继承三、多态四、Account和FreeChecking类的实现五、总结撒花&#x1f60a; 一、写在前面✨ 大家好&#xff01;我是初心&#xff0c;希望我们一路走来能坚守初心&#xff01; 今天跟大家分享的文章是 Python中的继承与多态 &#xff0c;希望能帮…