最新要闻
- 有钱人为何在意电动车电费?李想用超级富豪朋友习惯解释原因-全球讯息
- 环球速看:格科微: 格科微有限公司关于公司实际控制人、董事长、首席执行官提议公司回购股份的公告
- 上海妍秀国际医疗美容诊所医生以及擅长项目推荐
- 报道:上半年最后一个假 端午节放3天:假期后需连上6天班
- 《街霸6》新角色韩蛛俐介绍片:疯美人脚法了得-全球观天下
- 最新快讯!三星宣布多款旧设备停止更新支持
- 清仓特价 森马板鞋/运动鞋39元起、T恤29元起-要闻速递
- 今日快讯:又一个小米6钉子户消失 米粉给妈妈换小米13 雷军点赞
- “广州市十佳科普使者”出炉|全球观察
- 五一余额不足 最后一天返程现场排长队 网友:凌晨出门照堵不误
- “插队婆孙”被做成恶搞表情包:如此“网暴”是否合适?
- 母子争吵儿子走丢 机场民警15分钟帮找到孩子|播资讯
- 【世界速看料】最便宜的16GB显存显卡出现了!AMD、NVIDIA统统靠边站
- 焦点报道:苹果、谷歌起草追踪设备行业规范:打击滥用定位功能
- 当前短讯!实惨!男子拍演唱会:激光导致手机摄像头直接报废
- Realme 11 Pro+ 5G 曝光 在5月10日发布
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
热讯:写几行代码,了解响应式原理
原创文章,转载时请保留此声明,并给出原文连接。
(相关资料图)
作为当下的开发人员,无论是不是前端,可能都会频繁的与 React、Vue、Svelte、Solidjs 等等打交道。也许你已经很清楚它们背后的运作原理,那不必往下看了。如果还不是很清楚,那咱们可以一起写几行代码,来瞅一眼这些响应式框架背后的思路。
响应式框架最根本的功能其实只有一条:当数据发生变化时,让界面随之发生变化。
如何达成这一点呢?粗略的想一下就会觉得,首先要在数据和与之对应的 HTML 元素之间建立绑定关系。可以以某种方式给特定的 HTML 元素打个标记,然后当与此元素相关的值发生变更时,我们就能通过这个标记找到此元素,然后动态的改变它展示出来的值。
比如如下 HTML 模板片断:
{{ current_time }}
我们可以定义一个模板编译函数:
function compile(tpl) { const re = /(\{\{\s+)(\w+)(\s+\}\})/m; const mg = tpl.match(re); return tpl.replace(">{{", " vid="" + mg[2] + "">{{").replace(mg[0], "");}
执行该函数,就会给相关元素打上 vid 标记:
> compile("{{current_time}}
")
这样如果需要,我们就可以很方便的找到页面上需要响应的元素:
const vel = document.querySelector("[vid=current_time]");
接下来是数据部分。如何监测数据的变化呢?一种方案是使用代理。假如我们有如下数据对象:
{ current_time: "2023-05-03T05:14:46.176Z";}
可以使用如下函数,为其生成一个代理,拦截其赋值操作:
function reactive(data) { return new Proxy(data, { set(target, property, value) { const prev = target[property]; target[property] = value; if (prev !== value) { const vel = document.querySelector(`[vid=${property}]`); vel.innerHTML = value; } return true; }, });}
接下来,就可以面向数据编程了:
const data = reactive({ current_time: "2023-05-03T05:14:46.176Z",});setInterval(() => { data.current_time = new Date().toISOString();}, 1000);
最终效果如下:
以下是完整代码:
Document <script> function compile(tpl) { const re = /(\{\{\s+)(\w+)(\s+\}\})/m; const mg = tpl.match(re); return tpl.replace(">{{", " vid="" + mg[2] + "">{{").replace(mg[0], ""); } function reactive(data) { return new Proxy(data, { set(target, property, value) { const prev = target[property]; target[property] = value; if (prev !== value) { const vel = document.querySelector(`[vid=${property}]`); vel.innerHTML = value; } return true; }, }); } const app = { tpl: "{{ current_time }}
", data: { current_time: "2023-05-03T05:14:46.176Z", }, mount() { const rootEl = document.querySelector("#root"); rootEl.innerHTML = compile(this.tpl); this.data = reactive(this.data); this.mounted(); }, mounted() { setInterval(() => { this.data.current_time = new Date().toISOString(); }, 1000); }, }; document.addEventListener("DOMContentLoaded", () => { app.mount(); }); </script>
关键词:
-
第139篇:JS数组常用方法(map(),reduce(),foreach())
好家伙,本篇为MDN文档数组方法的学习笔记Array prototype reduce()-JavaScript|MDN(mozilla org)数组方法这
来源: 热讯:写几行代码,了解响应式原理
第139篇:JS数组常用方法(map(),reduce(),foreach())
83.赋值运算符
IMF:中国将成为今年亚太地区经济增长关键驱动因素
有钱人为何在意电动车电费?李想用超级富豪朋友习惯解释原因-全球讯息
环球速看:格科微: 格科微有限公司关于公司实际控制人、董事长、首席执行官提议公司回购股份的公告
【2023 · CANN训练营第一季】昇腾AI入门Pytorch
世界微动态丨23 网络数据在内核中流转
ZooKeeper 避坑指南: ZooKeeper 3.6.4 版本 BUG 导致的数据不一致问题
5月3日全国铁路迎来返程客流高峰 预计发送旅客1935万人次 世界独家
上海妍秀国际医疗美容诊所医生以及擅长项目推荐
报道:上半年最后一个假 端午节放3天:假期后需连上6天班
《街霸6》新角色韩蛛俐介绍片:疯美人脚法了得-全球观天下
Bash—source命令&export命令&bashrc文件
最新快讯!三星宣布多款旧设备停止更新支持
清仓特价 森马板鞋/运动鞋39元起、T恤29元起-要闻速递
今日快讯:又一个小米6钉子户消失 米粉给妈妈换小米13 雷军点赞
22 URL到网卡:网络数据流动
“广州市十佳科普使者”出炉|全球观察
五一余额不足 最后一天返程现场排长队 网友:凌晨出门照堵不误
“插队婆孙”被做成恶搞表情包:如此“网暴”是否合适?
【全球聚看点】OpenAI API keys 的申请和测试小结
母子争吵儿子走丢 机场民警15分钟帮找到孩子|播资讯
【世界速看料】最便宜的16GB显存显卡出现了!AMD、NVIDIA统统靠边站
焦点报道:苹果、谷歌起草追踪设备行业规范:打击滥用定位功能
当前短讯!实惨!男子拍演唱会:激光导致手机摄像头直接报废
Realme 11 Pro+ 5G 曝光 在5月10日发布
66元的的钟薛高在东北只要3.8元一根!商家回应
开眼!丰田为混动车申请“手动挡”专利:只为保留驾驶乐趣 环球热推荐
游客停车31小时被收640元:明码标价 但已退还
Blazor学习之旅系列总结目录
国铁集团郑州局预计3日客流创历史新高
小学生写人作文开头结尾集锦_小学生写人作文-观速讯
【天天时快讯】阿维塔定金72小时内可退成空话 店长:“已锁单”
汽车盗窃案上升548% 纽约市免费发放500个苹果AirTag应对
【当前独家】 男子吐槽在景区停车场一路捡到26个螺丝钉 官方回应
青海省西宁市城西区西川南路消防救援站站长助理玛尼坚——磨砺技能 守护平安(劳动者之歌)
多地消费市场见闻
世界资讯:客户抛弃雷克萨斯LM来买 腾势D9 4月销量10526辆
19.99万元期待落空 打价格战的特斯拉为何突然涨价:利润下滑
观速讯丨Intel AVX-512指令集要回来!残血版?AMD正尽情享受
世界最资讯丨艾玛·沃森曝光新写真 透露2024年开拍新电影
24小时不打烊,365天对外接待……“临汾好办”不要太方便! 环球播资讯
每日热文:前缀和
可怜的欧美!RTX 3070上市两年半 终于破发|今头条
环球头条:雷蛇噬魂鲨极速版耳机发布:50mm驱动单元、30小时续航
别只会“王者峡谷五日游” 这几款游戏才是假期最佳解
每日关注!4月新能源销量:比亚迪、埃安、理想全线杀疯
全球要闻:巨亏236亿元!三星内存、闪存要减产25%
天天热头条丨“天空之城”游人如织
学系统集成项目管理工程师(中项)系列16b_风险管理(下)
世界观点:4年来首次下滑 AMD发布Q1季度财报:锐龙处理器成重灾区
五菱缤果营销比亚迪海豚话术曝光:颜值高、空间大
【速看料】五一后机票价格暴跌 飞三亚从2800降到280元 专家表态:很正常
联合国秘书长:呼吁以色列停止行政拘留的做法|全球观焦点
python图像处理库
Java读取数据库表
世界今热点:徊的拼音_徊怎么组词
流媒体时代谋生艰难!好莱坞编剧15年来将首次罢工
为何插电混动车主爱在外充电 理想高管分析:薅羊毛感觉爽
当前资讯!司机等红绿灯时看手机被罚200扣3分 车是静止状态:网友吵翻 但事实没错
NV一代神卡卷土重来!Steam新报告:RTX 40降价仍没存在感_当前热议
五一想在户外看电影、选购投影仪一定要注意这几点
浙商证券研究所所长助理陈杭离职:否认网传800万年薪,专心处理舆论_世界热资讯
81.数组 全球热门
Win11“颠覆性”功能被遗弃:失效三个月仍被微软无视
嘴硬还是明智?丰田高管:电动汽车技术不成熟、混动才实用
同花顺ai机构活跃度指标公式源码_活跃度100
Android-图片压缩(二)-纯干货
C# 常量 结构体 委托 热门看点
喝的二五八万是什么意思_二五八万是什么意思
性能达SteamDeck两倍!华硕ROG Ally掌机先行开箱来了
奇葩!插队发飙者称是换队 网友吐槽发飙发泼有理:景区称仍算插队
天天热议:手机就能跑!开源AI机器人MLC LLM发布:无需联网
喜欢玩手机 那就活该单身
沃尔沃首款全电动汽车现已准备好接触其首批英国客户
降价伤人伤己?特斯拉国内外突然涨价背后:实为去库存|每日短讯
ChatGPT导致信息泄露后:三星将开发内部AI工具
女子淄博吃烧烤排不上队被投喂饱 山东太热情:人民日报点赞
11.迷宫问题(BFS 储存路径)
哈弗的新款Boxy SUV由前路虎设计师设计|世界球精选
韩国大学生吃掉天价香蕉艺术品 称是行为艺术!原作者回应了 每日速读
焦点快报!最高热效率达44%:五菱柳机自研高热效发动机点火成功
私拆承重墙高楼已加固 居民称胆真大:多层裂纹被掩盖 还敢住吗
坏账损失核算方法有_坏账损失核算方法 世界即时看
卖不动很无奈?NVIDIA对RTX 4090官降:今年第三次了
华为重申保持创新:1年1615亿研发费下14nm以上EDA国产化 5G必要专利全球第一_全球观热点
appuploader iOS 应用自动发布
苹果酸酶_关于苹果酸酶的简介
Windows 12这般模样?概念设计出炉:任务栏/开始菜单无比舒服 天天头条
21 文件六大基本操作|焦点速读
Tomcat7安装基于jdk 1.7环境
全球资讯:STM32_5(中断)
ASML吓坏?俄罗斯放狠话加快自研光刻机 能产7nm芯片:合作伙伴敲定
画面瘆人!印度机场从一女子包中搜出22种蛇 环球百事通
《最终幻想16》召唤兽概念图曝光!极具设计感 世界热闻
显存容量很重要!RTX 3060 8GB魔改12GB显存后:性能提升22%-全球球精选
全球播报:长城魏玛奇朵dht-phev特调版外观设计精致,线条流畅
业主拆承重墙 裂缝已蔓延到21层行为被称谋杀:律师回应公共安全罪可刑拘-当前短讯
被指插队发飙当事人回应原委上热搜 是排队平移非插队:自己被冤枉 网友看醉