jsx语法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jsx语法规则</title>
<style>
.title{
background-color: orange;
width: 200px;
}
</style>
</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 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'))
</script>
</body>
</html>
语法规则:
jsx语法规则:
1.定义虚拟DOM时,不要写引号。
2.标签中混入JS表达式时要用{}。
3.样式的类名指定不要用class,要用className。
4.内联样式,要用style={{key:value}}的形式去写。
5.只有一个根标签
6.标签必须闭合
7.标签首字母
(1).若小写字母开头,则将该标签转为html中同名元素,若html中无该标签对应的同名元素,则报错。
(2).若大写字母开头,react就去渲染对应的组件,若组件没有定义,则报错。
重点:
-
引入js变量时使用{变量名},还可以用于js表达式,但不能有逻辑性语句(例如for if)
const myId = 'aTgUiGu' const myData = 'HeLlo,rEaCt' const VDOM=( <h1 id={myId}> {myData} </h1> )
-
jsx中样式类名不是class,是className
-
jsx中内联样式不能直接“ ”指定,要用{{样式键值对}}
<span style={{color:'white',fontSize:'29px'}}>{myData.toLowerCase()}</span>
-
虚拟dom只有一个根标签
错误实例:
const VDOM = ( <h2 className="title" id={myId.toUpperCase()}> <span style={{color:'white',fontSize:'29px'}}>{myData.toLowerCase()}</span> </h2> <input type="text"/> //error error error )
-
标签首字母--小写,找html同名元素 --大写,渲染react组件
-
不能遍历对象,遍历产生html标签时,要指定唯一key给虚拟dom
<ul> { data.map((item,index)=>{ return <li key={index}>{item}</li> }) } </ul>