什么是 Jsx
简单例子:
        //create virtual dom , single quotes is not need
        const VDOM = <h1> Hello, React </h1>  
        //appy virtual dom to page
        ReactDOM.render(VDOM, document.getElementById("test"))  //first parameter is virtual dom, second parameter is container (div)
    
定义:
-  fullname: JavaScript XML 
-  它是React 定义的一种类似与XML(HTML 也是类XML)的JS 扩展语法: JS + XML 
-  本质是 React.createElement(component, props,… children) 的语法糖 
-  作用, 用于简化创建虚拟DOM 
-  写法: var ele = (<div> <span>hello Jsx<span> <div>)注意1,它不是字符串, 也不是HTML/XML 标签 
 注意2, 它最终产生的就是1个JS 的普通对象
语法规则1: 不要用双引号括住 Jsx Vdom对象的标签内容
下面例子是错误的:
	var ele  = "<h1>hello jsx<h1>"  //只创建了1个String对象, 而不是 Vdom 对象 
这个是正确的
    var ele = <h1>hello jsx<h1>
    var ele2 = (  //分行的话可以用括号
 				<h1>hello jsx<h1>
              )
  
语法规则2: 当标签中混入js表达式时, 需要用大括号{}
这个规则在定义VDOM 元素id和内容时是十分常用。
 例子:
<body>
    <div id ="test"></div>
    <script src="../node_modules/react/dist/react.min.js"></script>
    <script src="../node_modules/react-dom/dist/react-dom.min.js"></script>
    <script src="../node_modules/babel-standalone/babel.min.js"></script>
    <script type="text/babel">
        const myId = 'h2ID1'
        const myData = 'Hello, Jsx!'
        const VDOM = (
            <h2 id = {myId.toLowerCase()}>
                <span>{myData}</span>
            </h2> 
        )
        ReactDOM.render(VDOM,document.getElementById('test'))
    </script>
</body>

 
语法规则3: 当指定样式类名时, 要用className 而不是默认的class, 而且不需要大括号{}
因为class时ES6 的关键字, 所以react用的时className以避开
 例子:
 这里定义了1个sytle_title的样式类
 index.css
.style_title{
    background-color: orange;
    width: 200px;
}
index_css.html
<body>
    <div id ="test"></div>
    <script src="../node_modules/react/dist/react.min.js"></script>
    <script src="../node_modules/react-dom/dist/react-dom.min.js"></script>
    <script src="../node_modules/babel-standalone/babel.min.js"></script>
     <link rel="stylesheet" href="./index.css">
     
    <script type="text/babel">
        const myId = 'h2ID1'
        const myData = 'Hello, Jsx!'
        const VDOM = (
            <h2 id = {myId.toLowerCase()} className='style_title'>
                <span>{myData}</span>
            </h2> 
        )
        ReactDOM.render(VDOM,document.getElementById('test'))
    </script>
   
</body>
语法规则4: 当使用内联模式的样式时, 必须用双大括号{{key:“value”}}模式
下面这样, 使用正常的内联样式写法在react的VDOM里是错误的
        const VDOM = (
            <h2 id = {myId.toLowerCase()}>
                <span style="color:green; fontSize:20px">{myData}</span>
            </h2> 
        )
        ReactDOM.render(VDOM,document.getElementById('test'))
正确写法:
        const VDOM = (
            <h2 id = {myId.toLowerCase()}>
                <span style={{"color":"green", "fontSize":"30px"}}>{myData}</span>
            </h2> 
        )
        ReactDOM.render(VDOM,document.getElementById('test'))
注意style= 后面跟住的是双大括号, 最外层的大括号表示里面要写js表达式, 里面那层大括号表示里面写的是js对象,
 里面的键值对中, 值的值必须用双引号括住.
语法规则5 , 每个虚拟DOM的定义中, 只能有1个根标签
例如下面的写法时错误的
 因为最高层有两个h2 标签。 在vscode里也会有语法高亮提示错误
        const VDOM = (
            <h2 id = {myId.toLowerCase()}>
                <span style={{"color":"green", "fontSize":"30px"}}>{myData}</span>
            </h2> 
            <h2 id = {myId.toLowerCase() + "_2"}>
                <span style={{"color":"blue", "fontSize":"30px"}}>{myData}</span>
            </h2> 
        )
        ReactDOM.render(VDOM,document.getElementById('test'))
解决方法很简单, 最外层用1个div包住即可
     const VDOM = (
            <div>
                <h2 id = {myId.toLowerCase()}>
                    <span style={{"color":"green", "fontSize":"30px"}}>{myData}</span>
                </h2> 
                <h2 id = {myId.toLowerCase() + "_2"}>
                    <span style={{"color":"blue", "fontSize":"30px"}}>{myData}</span>
                </h2> 
            </div>
        )
        ReactDOM.render(VDOM,document.getElementById('test'))
语法规则6 , 标签必须闭合
下面写法是错误的
		const VDOM = (
            <div>
               <input type="text">
            </div>
        )
        ReactDOM.render(VDOM,document.getElementById('test'))
我们需要显式闭合标签
		const VDOM = (
            <div>
               <input type="text"></input>
               <input type="text /> //也可以
            </div>
        )
        ReactDOM.render(VDOM,document.getElementById('test'))
语法规则7 , 标签首字母,
- 如果是小写, 则React会将jsx标签转化为html同名标签. 若html中无此标签则报错
- 如果是大写, 则React会认为是1个React组件(Component), 若组件没有定义则报错
	const VDOM = (
            <div>
               <good>hey</good> //小写, 报错, 因为html中没有good这个标签
               <Good>hey</Good> //大写, React 认为是1个Good组件, 取决与有没定义
            </div>
        )














![[标准库]STM32F103R8T6 点灯以及按键扫描](https://img-blog.csdnimg.cn/a5eb21d2096e42f2b6275f0022de8ace.png)




