文章目录
JSX定义
- 全称:
JavaScript XML
- 类似:
React
定义的一种类似于XML
的JS
扩展语法:JS+XML
- 本质:是
React.createElement(component,props,...children)
方法的语法糖 - 作用:用来简化创建虚拟
DOM
- 标签名任意::
HTML
标签或其它标签 - 标签属性任意:
HTML
标签属性或其它 - 参考网站:网站
JSX语法规则
- 定义虚拟
DOM
时,不要写引号 - 标签中如果需要混入
JS
表达式时,需要使用{ }
<script type="text/babel">
const data = 'Hello,React-JSX'
//1.创建虚拟DOM
const VDOM = (
<h1 id="jsx">
<span>{data}</span>
</h1>
)
//2.渲染虚拟DOM到页面
ReactDOM.render(VDOM,document.getElementById('test'))
</script>
- 样式的类名指定不要使用
class
,要用className
<head>
<style>
.title{
background-color: aqua;
width: 500px;
}
</style>
</head>
<body>
<!-- 准备好一个"容器" -->
<div id="test"></div>
<script type="text/babel">
//1.创建虚拟DOM
const VDOM = (
<h1 id="jsx" className='title'>
<span>Hello,React-JSX</span>
</h1>
)
//2.渲染虚拟DOM到页面
ReactDOM.render(VDOM,document.getElementById('test'))
</script>
</body>
- 内联样式(在
JSX
语法中使用),要使用style={{key:value}}
的形式去写。
<script type="text/babel">
//1.创建虚拟DOM
const VDOM = (
<h1 id="jsx" className='title'>
<span style={{color:'white',fontSize:'50px'}}>Hello,React-JSX</span>
</h1>
)
//2.渲染虚拟DOM到页面
ReactDOM.render(VDOM,document.getElementById('test'))
</script>
JSX
中只能有一个根标签- 标签必须闭合
<span></span>
- 标签首字母规则
- 如果是小写字母开头,则将该标签转为
html
中同名的元素,若html
中无该标签对应的同名元素,则报错 - 如果是大写字母开头,
React
就去渲染对应的组件,若组件没有定义,则报错
- 如果是小写字母开头,则将该标签转为
JSX练习
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- 准备好一个"容器" -->
<div id="test"></div>
<!-- 引入react核心库 -->
<script type="text/JavaScript" src="../js/react.development.js"></script>
<!-- 引入react-dom,用于支持react操作DOM -->
<script type="text/JavaScript" src="../js/react-dom.development.js"></script>
<!-- 引入babel,用于将JSX转为JS -->
<script type="text/JavaScript" src="../js/babel.min.js"></script>
<script type="text/babel">
//模拟一些数据
const data = ['学习的第一天','学习的第二天','学习的第三天']
//1.创建虚拟DOM
const VDOM = (
<div>
<h1>学习React很开心</h1>
<ul>
{
data.map((item,index)=>{
return <li key={index}>{item}</li>
})
}
</ul>
</div>
)
//2.渲染虚拟DOM到页面
ReactDOM.render(VDOM,document.getElementById('test'))
</script>
</body>
</html>
效果
总结
- 在
JSX
中可以嵌套多个HTML
标签,只需要使用div
元素包裹起来即可
<script type="text/babel">
//1.创建虚拟DOM
const VDOM = (
<div>
<h1 id="jsx" className='title'>
<span style={{color:'white',fontSize:'50px'}}>Hello,React-JSX</span>
</h1>
<input type="text"/>
</div>
)
//2.渲染虚拟DOM到页面
ReactDOM.render(VDOM,document.getElementById('test'))
</script>
-
在
JSX
中使用JavaScript
表达式。表达式写在花括号 {}
中。 -
在
JSX
中不能使用if else
语句,但可以使用conditional (三元运算) 表达式
来替代。 -
React
推荐使用内联样式。可以使用camelCase(驼峰) 语法
来设置内联样式.。React
会在指定元素数字后自动添加px
。 -
JSX
允许在模板中插入数组,数组会自动展开所有成员
<script type="text/babel">
var arr = [
<h1>张三</h1>,
<h1>李四</h1>
]
//1.创建虚拟DOM
const VDOM = (
<div>
<h1>{arr}</h1>
</div>
)
//2.渲染虚拟DOM到页面
ReactDOM.render(VDOM,document.getElementById('test'))
</script>
学习网址:网址