react使用js创建虚拟dom的两种方法、区别以及jsx语法规则

使用js创建虚拟dom的两种方法

使用js

如果现在需要在h1里面加一个span标签,怎么加呢?

使用JSX

javascript 复制代码
 <script type="text/babel">
    const VDOM = (  /* 此处一定不要写引号,因为不是字符串 */
      <h1 id="title">
        <span>Hello,React</span>
      </h1>
    )
    ReactDOM.render(VDOM, document.getElementById('test'))
  </script>

使用JS

javascript 复制代码
  <script type="text/javascript">
    const VDOM = React.createElement('h1', { id: 'title' }, React.createElement('span', {}, 'Hello,React'))
    ReactDOM.render(VDOM, document.getElementById('test'))
  </script>

如果多层标签实行嵌套,使用JS就会很麻烦,推荐使用JSX,更加方便的创建虚dom

虚拟dom与真实dom的区别

虚拟dom就相当于是一个object类型的对象

如果写了console,借助浏览器的控制台给你输出,那么就直接输出了标签,想看属性可以加一个debugger;在source中查看,把鼠标放上去,会发现真实dom有很多的属性

javascript 复制代码
 <script type="text/babel"> /* 此处一定要写babel */
    //1.创建虚拟DOM
    const VDOM = (  /* 此处一定不要写引号,因为不是字符串 */
      <h1 id="title">
        <span>Hello,React</span>
      </h1>
    )
    //2.渲染虚拟DOM到页面
    ReactDOM.render(VDOM, document.getElementById('test'))

    const TDOM = document.getElementById('demo')
    console.log('虚拟DOM', VDOM);
    console.log('真实DOM', TDOM);
    debugger;
    // console.log(typeof VDOM);
    // console.log(VDOM instanceof Object);
    /*
        关于虚拟DOM:
          1.本质是Object类型的对象(一般对象)
          2.虚拟DOM比较"轻",真实DOM比较"重",因为虚拟DOM是React内部在用,无需真实DOM上那么多的属性。
          3.虚拟DOM最终会被React转化为真实DOM,呈现在页面上。
     */
  </script>

jsx语法规则

1.定义虚拟DOM时,不要写引号。

2.标签中混入JS表达式时要用{}。

3.样式的类名指定不要用class,要用className。

4.内联样式,要用style={{key:value}}的形式去写。(第一个花括号代表是要在里面写js代码,第二个花括号代表要在里面写属性对象)

5.JSX代码只有一个根标签

6.标签必须闭合

7.标签首字母

(1).若小写字母开头,则将该标签转为html中同名元素,若html中无该标签对应的同名元素,则报错。

(2).若大写字母开头,react就去渲染对应的组件,若组件没有定义,则报错。

JSX里面的标签最终会将其转化为html标签

javascript 复制代码
	<script type="text/babel" >
		const myId = 'aTgUiGu'
		const myData = 'HeLlo,rEaCt'

		//1.创建虚拟DOM
		const VDOM = (
			<div>
				<h2 className="title" id={myId.toLowerCase()}>
					<span style={{color:'white',fontSize:'29px'}}>{myData.toLowerCase()}</span>
				</h2>
				<h2 className="title" id={myId.toUpperCase()}>
					<span style={{color:'white',fontSize:'29px'}}>{myData.toLowerCase()}</span>
				</h2>
				<input type="text"/>
			</div>
		)
		//2.渲染虚拟DOM到页面
		ReactDOM.render(VDOM,document.getElementById('test'))

		/* 
				jsx语法规则:
						1.定义虚拟DOM时,不要写引号。
						2.标签中混入JS表达式时要用{}。
						3.样式的类名指定不要用class,要用className。
						4.内联样式,要用style={{key:value}}的形式去写。
						5.只有一个根标签
						6.标签必须闭合
						7.标签首字母
								(1).若小写字母开头,则将该标签转为html中同名元素,若html中无该标签对应的同名元素,则报错。
								(2).若大写字母开头,react就去渲染对应的组件,若组件没有定义,则报错。

		 */
	</script>
相关推荐
开开心心就好30 分钟前
电脑息屏工具,一键黑屏超方便
开发语言·javascript·电脑·scala·erlang·perl
江号软件分享31 分钟前
有效保障隐私,如何安全地擦除电脑上的敏感数据
前端
web守墓人2 小时前
【前端】ikun-markdown: 纯js实现markdown到富文本html的转换库
前端·javascript·html
Savior`L2 小时前
CSS知识复习5
前端·css
许白掰2 小时前
Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
linux·运维·服务器·前端·学习·编辑器
中微子6 小时前
🔥 React Context 面试必考!从源码到实战的完整攻略 | 99%的人都不知道的性能陷阱
前端·react.js
秋田君7 小时前
深入理解JavaScript设计模式之命令模式
javascript·设计模式·命令模式
中微子7 小时前
React 状态管理 源码深度解析
前端·react.js
风吹落叶花飘荡8 小时前
2025 Next.js项目提前编译并在服务器
服务器·开发语言·javascript
加减法原则8 小时前
Vue3 组合式函数:让你的代码复用如丝般顺滑
前端·vue.js