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

【学习】【记录】【分享】微型响应系统

前言

本篇博客源于对Vue和React框架中响应式系统的好奇与探索。若文中存在任何错误或有更优的解决方案,欢迎各位读者不吝指正,让我们一起学习,共同进步。

1. 什么是响应式系统

响应式系统是一种编程范式,它允许数据的变化自动地反映在用户界面上。Vue和React等现代前端框架都使用了响应式系统来简化数据驱动的开发。

2. 实现一个简单的响应式系统

在这篇博客中,我们将实现一个简单的响应式系统。这个系统包括以下几个部分:

(1) 数据代理:通过Proxy对象来拦截对数据的访问和修改。
(2) 副作用函数:当数据变化时,自动执行相关的副作用函数。
(3) 调度执行:在数据变化时,调度执行副作用函数。

3. 代码实现

3.1 初始化项目
mkdir demo
cd demo
npm init -y
npm install http-server -D
3.2 根目录下创建index.html和index.js文件
<!-- path demo/index.html -->
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>微型响应系统</title></head><body><script src="./index.js"></script></body>
</html>
// path demo/index.js
/*** 用一个全局变量存储被注册的副作用函数*/
let activeEffect;
/*** @description 原始数据*/
const data = { text: "Hello, World!" };/*** @description 存储副作用函数的桶*/
const bucket = new Set();/*** @description 代理对象*/
const obj = new Proxy(data, {get(target, key) {if (activeEffect) {bucket.add(activeEffect);}return target[key];},set(target, key, newVal) {target[key] = newVal;bucket.forEach((f) => f());},
});/*** @description 副作用函数*/
const effect = (fn) => {activeEffect = fn;fn();
};/*** @description 执行副作用函数,触发读取*/
effect(() => {document.body.textContent = obj.text;
});/*** @description 1 秒后修改响应式数据*/
setTimeout(() => {obj.text = "微型响应系统";
}, 1000);

当前目录结构
demo
├── index.html
├── index.js
└── package.json

3.3 package.json中添加指令
 // ..."scripts": {"start":"http-server",},//...
3.4 启动项目
npm start

4. 总结

通过以上代码,我们实现了一个微型响应式系统。这个系统可以追踪数据的变化,并在数据变化时执行相关的副作用函数。如果你有任何问题或建议,欢迎在评论区留言。让我们一起学习,共同进步!

http://www.lryc.cn/news/520512.html

相关文章:

  • vue城市道路交通流量预测可视化系统
  • Windows7 Emacs设置及中文乱码解决
  • Python AI教程之十五:监督学习之决策树(6)高级算法C5.0决策树算法介绍
  • MOS管为什么会有夹断,夹断后为什么会有电流?该电流为什么是恒定的?
  • 网络安全-RSA非对称加密算法、数字签名
  • 【AI日记】25.01.13
  • Mysql--运维篇--空间管理(表空间,索引空间,临时表空间,二进制日志,数据归档等)
  • JVM面试相关
  • 【leetcode 13】哈希表 242.有效的字母异位词
  • Blazor开发复杂信息管理系统的优势
  • ue5 1.平A,两段连击蒙太奇。鼠标点一下,就放2段动画。2,动画混合即融合,边跑边挥剑,3,动画通知,动画到某一帧,把控制权交给蓝图。就执行蓝图节点
  • 2025,AI走向何方?暴雨技术专家为您展望
  • Threejs实现 区块链网络效应
  • 宁德时代C++后端开发面试题及参考答案
  • 【三维数域】三维数据调度-负载均衡和资源优化
  • Linux服务器网络丢包场景及解决办法
  • 【信息系统项目管理师】高分论文:论信息系统项目的采购管理(数据中台项目)
  • AI语音机器人大模型是什么?
  • 极客说|Azure AI Agent Service 结合 AutoGen/Semantic Kernel 构建多智能体解决⽅案
  • SparrowRTOS系列:链表版本内核
  • Elasticsearch—索引库操作(增删查改)
  • RabbitMQ高级篇
  • R4-LSTM学习笔记
  • Unity搭配VS Code使用
  • Go Ebiten小游戏开发:井字棋
  • 嵌入式系统中的 OpenCV 与 OpenGLES 协同应用
  • 秒懂虚拟化(二):服务器虚拟化、操作系统虚拟化、服务虚拟化全解析,通俗解读版
  • Java定时任务
  • springCloud特色知识记录(基于黑马教程2024年)
  • Linux---shell脚本练习