React JSX
React JSX
React 使用 JSX 来替代常规的 JavaScript。
例子:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="../js/react.development.js"></script> <script src="../js/react-dom.development.js"></script> <script src="../js/babel.min.js"></script> </head> <body> <div id="test1"></div> <div id="test2"></div> <script type="text/javascript"> const msg= 'I Like You!'; const myId= 'Abc'; //创建虚拟Dom元素 const vDom1 = React.createElement('h2',{id:myId.toLowerCase()},msg.toUpperCase()) //渲染虚拟Dom ReactDOM.render(vDom1,document.getElementById('test1')) </script> <script type="text/babel"> //创建虚拟Dom元素 const vDom2 = <h3 id={myId.toUpperCase()}>{msg.toLowerCase()}</h3> //渲染虚拟Dom ReactDOM.render(vDom2,document.getElementById('test2')) </script> </body> </html>
效果:
虚拟DOM
1) React提供了一些API来创建一种 `特别` 的一般js对象
- var element = React.createElement('h1', {id:'myTitle'},'hello')
- 上面创建的就是一个简单的虚拟DOM对象
2) 虚拟DOM对象最终都会被React转换为真实的DOM
JSX
1) 全称: JavaScript XML
2) react定义的一种类似于XML的JS扩展语法: XML+JS
3) 作用: 用来创建react虚拟DOM(元素)对象
- var ele = <h1>Hello JSX!</h1>
- 注意1: 它不是字符串, 也不是HTML/XML标签
- 注意2: 它最终产生的就是一个JS对象
4) 标签名任意: HTML标签或其它标签
5) 标签属性任意: HTML标签属性或其它
6) 基本语法规则
- 遇到 <开头的代码, 以标签的语法解析: html同名标签转换为html同名元素, 其它标签需要特别解析
- 遇到以 { 开头的代码,以JS语法解析: 标签中的js代码必须用{ }包含
7) babel.js的作用
- 浏览器不能直接解析JSX代码, 需要babel转译为纯JS的代码才能运行
- 只要用了JSX,都要加上type="text/babel", 声明需要babel来处理
3) 我们编码时基本只需要操作react的虚拟DOM相关数据, react会转换为真实DOM变化而更新界面
渲染虚拟DOM(元素)
1) 语法: ReactDOM.render(virtualDOM, containerDOM)
2) 作用: 将虚拟DOM元素渲染到页面中的真实容器DOM中显示
3) 参数说明
- 参数一: 纯js或jsx创建的虚拟dom对象
- 参数二: 用来包含虚拟DOM元素的真实dom元素对象(一般是一个div)
建虚拟DOM的2种方式
1) 纯JS(一般不用)
React.createElement('h1', {id:'myTitle'}, title)
2) JSX:
<h1 id='myTitle'>{title}</h1>
注意点:
* 标签必须有结束
* 标签的class属性必须改为className属性
* 标签的style属性值必须为: {{color:'red', width:12}}
练习例子:实现一个列表:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="../js/react.development.js"></script> <script src="../js/react-dom.development.js"></script> <script src="../js/babel.min.js"></script> </head> <body> <h2>四大名著列表</h2> <div id="test"></div> <script type="text/babel"> const names=['三国演义','西游记','红楼梦','水浒传'] //创建虚拟Dom元素 const vDom = ( <ul> { //使用数组的map方法,将数据数组转换为标签数组 names.map((name,index)=><li key={index}>{name}</li>) } </ul> ) //渲染虚拟Dom ReactDOM.render(vDom,document.getElementById('test')) </script> </body> </html>
结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具