html,js,react三种方法编写helloworld理解virtual dom

embedded/2024/9/24 6:20:01/
htmledit_views">

学习任何一个新语言,好像都从helloworld开始。:)。

html helloworld

静态hello world

html"><!DOCTYPE html>
<html>
<head><title>Hello World</title>
</head>
<body><p>Hello World</p>
</body>
</html>

js helloworld

需要等待10s的动态hello world

html"><!DOCTYPE html>
<html>
<head><title>Hello World</title>
</head>
<body><script>// JavaScript代码开始console.log('开始等待10秒...');setTimeout(function() {console.log('10秒过去了!');document.write("Hello World");}, 10000);// JavaScript代码结束</script>
</body>
</html>

react helloworld

需要等待10s的动态hello world

html"><!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>React Hello World</title><!-- 引入React和ReactDOM库 --><script src="https://unpkg.com/react@18/umd/react.development.js"></script><script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
</head>
<body><!-- React组件的容器 --><div id="root"></div><script>// 使用React.createElement创建React元素const element = React.createElement('h1',null,'Hello World');// 将React元素渲染到页面上setTimeout(function(){ReactDOM.render(element, document.getElementById('root'));console.log('10秒过去了!');}, 10000);</script>
</body>
</html>

从helloworld到helloworld!

html需要更改定义的标签内容。

html"><p>Hello World!</p>

js需要更改dom

html">document.write("Hello World!");

reactjs需要更改element

html" title=javascript>javascript">                                            
const element = React.createElement('h1',null,'Hello World!'
);

vitural dom

我们从以上react的程序里看到,react创建了element然后渲染。

这里的element不是真正的dom。document.getElement获取的是真实的dom和react创建的不是一个。真正的ui界面功能很富足,如果每次所有元素都重新加载真实的dom性能很低,而有些程序仅仅变动的是界面的某些数值,完全重新加载dom就显得很笨重。

vitural dom是html" title=javascript>javascript提出的概念,而不是react特有,react很好的利用该概念。

vitural dom是在本地的内存虚拟个dom,当js/react组件或者属性发生变化时,js/react重建dom, 然后diff新旧dom的区别,将差异应用到真实的dom,实现ui的更新。

从helloworld到helloworld!,react只更新了一个element,如果真实界面上很多element,真实的dom其他的element就不会受影响,ui仅更新该element的属性,效率很高。


http://www.ppmy.cn/embedded/115949.html

相关文章

操作系统知识2

1.分页与分段有什么区别&#xff1f; 分页&#xff1a; 内存管理的一种方法&#xff0c;将虚拟地址空间划分为固定大小的页&#xff08;通常是4KB&#xff09;。页表用于映射虚拟页到物理页&#xff0c;简化了内存分配和管理。适合处理大规模程序的内存分配&#xff0c;可以有效…

Apple Intelligence预计会在iOS 18.1和iOS 18.4之间按此顺序推出

本月早些时候 iOS 18 已公开发布&#xff0c;但首批 Apple Intelligence 功能要等到 10 月份 iOS 18.1 发布后才可以使用。Apple Intelligence 功能将继续在 iOS 18.2 及更高版本中推出&#xff0c;预计路线图如下&#xff0c;出自 Apple 网站和传闻。 Apple Intelligence 需要…

Rasa对话模型——做一个语言助手

1、Rasa模型 1.1 模型介绍 Rasa是一个用于构建对话 AI 的开源框架&#xff0c;主要用于开发聊天机器人和语音助手。Rasa 提供了自然语言理解&#xff08;NLU&#xff09;和对话管理&#xff08;DM&#xff09;功能&#xff0c;使开发者能够创建智能、交互式的对话系统。 1.2…

TryHackMe 第4天 | Pre Security (三)

该学习路径讲解了网络安全入门的必备技术知识&#xff0c;比如计算机网络、网络协议、Linux命令、Windows设置等内容。过去两篇已经对计算机网络和网络协议进行了简单介绍&#xff0c;本篇博客将记录 Linux命令 部分。 Linux 系统的优点就是其轻量级&#xff0c;有些 Linux 系…

动态SQL中的foreach标签【后端 21】

动态SQL中的foreach标签 在Java开发中&#xff0c;特别是在使用MyBatis进行数据库操作时&#xff0c;动态SQL是一项非常强大的功能。MyBatis的<foreach>标签就是动态SQL中最为常用的一个&#xff0c;主要用于处理包含IN子句的查询或者批量插入等操作。本文将详细介绍<…

基于深度学习的竞争性对抗学习

基于深度学习的竞争性对抗学习是一类通过模拟多个智能体之间竞争关系来提升其学习能力和决策性能的机器学习方法。竞争性对抗学习可以通过多智能体相互对抗的环境来提升其策略的优化能力&#xff0c;尤其在涉及博弈、动态规划、以及真实世界中的竞争场景时表现尤为突出。 核心…

RMAN异机恢复数据库记录

场景&#xff1a;数据库服务器宕机&#xff0c;无法恢复 处理&#xff1a;使用备份资料进行异地恢复 1.此处环境为同平台、同版本&#xff08;操作系统版本可以不同&#xff0c;但数据库版本需相同&#xff09;&#xff0c;源机器和目标机器具有相同的目录结构。 2.目标机器只…

MySQL基础篇(黑马程序员2022-01-18)

1 MySQL数据库概述 1.1 MySQL数据库的下载,安装,启动停止 1.2 数据模型 (1)关系型数据库(RDBMS) 概念&#xff1a;建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库。 特点&#xff1a; A. 使用表存储数据&#xff0c;格式统一&#xff0c;便于维护。…