数据响应式

news2024/9/20 11:23:15

响应式原理

课堂主题

  • 1.利用defineProperty实现数据劫持
  • 2.利用ES6中proxy实现数据劫持
  • 3.实现数据驱动视图更新,实现数据响应
  • 4.发布订阅模式

知识点

  • defineProperty;
  • Proxy代理
  • 数据劫持
  • 发布订阅
  • 观察者模式与发布订阅
  • 数据响应式

defineProperty

Object.defineProperty(obj,'name',{
        get(){
            return value;
        },
        set(newValue){
            console.log("set...");
            value = newValue;
        }
    })

Proxy

  • 定义 :对象用于定义基本操作的自定义行为(如属性查找,赋值,枚举,函数调用等)。

  • 基本使用

    let obj = new Proxy({
                        name: "张三",
                        age: 20
                  },{
                        get(target, name) {
                            return target[name];
                        },
                        set(target,name,value){
                            target[name] = value;
                        }
                   })
    
  • 相关配置参数

    has(target, propKey):拦截propKey in proxy的操作,返回一个布尔值。
    defineProperty(target, propKey, propDesc):拦截Object.defineProperty(proxy, propKey, propDesc)、Object.defineProperties(proxy, propDescs),返回一个布尔值。
    

通过数据劫持实现表达式

  • 通过defineProperty劫持数据:observer

##发布订阅监听数据的更新

  • 通过自定义事件触发更新
  • 通过发布订阅模式触发更新

实现指令

  • 输入框赋值
  • 监听输入事件

观察者模式

定义一个对象与其他对象之间的一种依赖关系,当对象发生某种变化的时候,依赖它的其它对象都会得到更新,一对多的关系。

发布订阅模式

发布-订阅是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者)。而是将发布的消息分为不同的类别,无需了解哪些订阅者(如果有的话)可能存在。同样的,订阅者可以表达对一个或多个类别的兴趣,只接收感兴趣的消息,无需了解哪些发布者(如果有的话)存在。
在这里插入图片描述

在这里插入图片描述

二者关系

观察者模式观察者与订阅者之间有直接联系。发布订阅中发布者和订阅者无直接依赖关系。观察者模式属于紧解耦,发布订阅模式属于松解耦。发布订阅广义上是观察者模式。

总结

  • defineProperty
  • Proxy代理
  • 数据劫持
  • 发布订阅
  • 数据响应式

下节预告

  • 函数式编程

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

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

相关文章

Junit单元测试入门

目录 一、单元测试 1.1 基本概念 1.2 以往测试存在的问题和不足 二、快速入门 2.1 基本步骤 2.2 基本使用示例(vscode为例) 2.2 断言机制(重要) 2.3 其它注解 一、单元测试 1.1 基本概念 针对最小单元的测试&#xff0c…

集成电路学习:什么是CPU中央处理器

一、CPU:中央处理器 CPU,全称Central Processing Unit,即中央处理器,是计算机系统的核心部件,负责执行程序指令,完成数据的算术运算或逻辑运算等任务。它是计算机中最重要的硬件之一,相当于计算…

【Qt 事件】—— 详解Qt事件处理

目录 (一)事件介绍 (二)事件的处理 (三)按键事件 3.1 单个按键 3.2 组合按键 (四)鼠标事件 4.1 鼠标单击事件 4.2 鼠标释放事件 4.3 鼠标双击事件 4.4 鼠标移动事件 4.5…

【Redis】Redis 典型应⽤ - 缓存 (cache)

Redis 典型应⽤ - 缓存 cache 什么是缓存使⽤ Redis 作为缓存缓存的更新策略1) 定期⽣成2) 实时⽣成 缓存预热, 缓存穿透, 缓存雪崩 和 缓存击穿关于缓存预热 (Cache preheating)关于缓存穿透 (Cache penetration)关于缓存雪崩 (Cache avalanche)关于缓存击穿 (Cache breakdown…

OpenLayers3, 航线动画实现

文章目录 一、前言二、代码实现三、总结 一、前言 本文基于OpenLayers3&#xff0c;实现航线动画的功能。 二、代码实现 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quo…

题解AtCoder ABC 358 F Easiest Maze

一道模拟题。 思路 最短的路线是直接竖着走下来&#xff0c;经过 n n n 个格子&#xff0c;所以 k k k 最小是 n n n。如果想要延长路线&#xff0c;可以采用九转大肠的形状&#xff0c;就像这样&#xff1a; 可以发现&#xff0c;每次向左走之后都必须走回来&#xff0c;…

关于几道计算机网络题的解答

2017年12月28日&#xff0c;星期四&#xff0c; 照片上的第一题中多项式的指数看不清&#xff0c;但没关系&#xff0c;就现在的情形&#xff0c;说一下大概的思路&#xff0c;参考着再结合题目中实际的参数&#xff0c;再套一遍就能把题目解出来了&#xff0c; 假设&#xf…

JS 如何判断是否是IE浏览器

例子 if(!!window.ActiveXObject || "ActiveXObject" in window){alert("抱歉&#xff0c;不支持IE浏览器&#xff01;");return; }

kafka使用

异步发送数据 package com.shf.kafka.producer; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerConfig; import org.apache.kafka.clients.producer.ProducerRecord; import org.apache.kafka.common.serializa…

算法基础-双指针算法

最长连续不重复子序列 双指针[j, i]维护的是以a[i]结尾的最长连续不重复子序列[j, i - 1]是前一步得到的最长连续不重复子序列&#xff0c;所以如果[j, i]中有重复元素&#xff0c;一定是a[i]&#xff0c;所以[j, i - 1]中一定有一个数字与a[i]重复&#xff0c;因此右移j直到a[…

【AI学习笔记】AIGC,AI绘画 ComfyUI+ComfyUI Manager安装

【AI学习笔记】ComfyUIComfyUI Manager安装 最近在面向BOSS直聘学习ComfyUI的使用&#xff0c;但是不出意外&#xff0c;因为学习者们迥异的电脑配置以及杂乱的AI软件工具包互相纠缠&#xff0c;跟人工智能相关的环境安装多少都会遇到点教程预料不到的BUG。 推荐入门教程&…

基于SpringBoot的智能医院管理系统

&#x1f4a5;&#x1f4a5;源码和论文下载&#x1f4a5;&#x1f4a5;&#xff1a;基于SpringBoot的智能医院管理系统-源码论文报告数据库文件.rar 1. 系统介绍 随着计算机科学的迅猛发展和互联网技术的不断推进&#xff0c;人们的生活方式发生了巨大的变化&#xff0c;同时也…

华为云征文 | Tomcat保姆级安装教程

简介 华为云Flexus云服务是新一代开箱即用、体验跃级、面向中小企业和开发者打造的高品价比云服务产品。Flexus云服务器X实例是华为云Flexus云服务的一个产品。 Flexus云服务器X实例是新一代面向中小企业和开发者打造的柔性算力云服务器&#xff0c;可智能感知业务负载&#…

借鉴腾讯系统架构从小到大的过程 - 如何做好一个系统设计?不限于(慧哥)慧知开源充电桩平台

推荐一套企业级开源充电桩平台&#xff1a;完整代码包含多租户、硬件模拟器、多运营商、多小程序&#xff0c;汽车 电动自行车、云快充协议&#xff1b;——(慧哥)慧知开源充电桩平台&#xff1b;https://liwenhui.blog.csdn.net/article/details/134773779?spm1001.2014.3001…

华为云征文|Flexus X实例性能测评

在数字化转型时代&#xff0c;云服务器成为企业 IT 基础设施的核心&#xff0c;其性能直接影响业务运行效率和用户体验。 面对众多云服务商提供的多样配置&#xff0c;如何选择合适的云服务器就变得尤为重要。 云服务器的性能测试对于识别潜在性能瓶颈&#xff0c;确保在高并…

安装python软件

系统是32位还是64位 “此电脑"或者"我的电脑”&#xff0c;鼠标右键——属性&#xff0c;出现如下图查看电脑系统类型&#xff08;图中显示电脑系统类型是64位系统&#xff0c;安装Python则选择其名含有"adm64"字样的文件&#xff09;: 软件安装地址 全…

AtCoder ABC 369 C 题 题解

题目传送门 C - Count Arithmetic Subarrays (atcoder.jp) 题解&#xff1a; 本题可以先预处理好 与 之间的差值。首先每个数都是一个等差数列&#xff0c;接着&#xff0c;每两个数也是一个等差数列&#xff0c;然后可以看一个数字持续了几位&#xff0c;如果持续了位&am…

layui中 子页面获取父页面的数据

父页面中 window.autosend function (obj) {//获取对应行的数据&#xff0c;var datafather obj.data;// console.log(data)layer.open({type: 2,maxmin: true,title: 选择发送时间,shade: 0.1,// area: screen(),area: [600px, 400px],content: autosend,success: function(…

Linux 背景、命令

一、嵌入式、Linux背景 1、嵌入式&#xff1a; 硬件与软件相结合 定制、为硬件设计相关代码来进行操作&#xff0c;代码测试&#xff0c;烧进板子&#xff0c;通过语音、图像、按钮等操作方式来调用。 2、操作系统种类&#xff1a; Dos&#xff0c;Windows&#xff0c;Uni…

【小白教程(无伤速通)】Visual Studio中Libtorch安装与配置

1. Libtorch下载 Download here (Release version): https://download.pytorch.org/libtorch/cpu/libtorch-win-shared-with-deps-1.8.0%2Bcpu.zipDownload here (Debug version): https://download.pytorch.org/libtorch/cpu/libtorch-win-shared-with-deps-debug-1.8.0%2B…