当前位置: 首页 > 工具软件 > JSX > 使用案例 >

jsx

郭意
2023-12-01

简介
React发明了JSX,利用HTML语法来创建虚拟DOM。React的和新机制之一就是可以在内存中创建虚拟的DOM元素。以此来减少对实际DOM的操作从而提升性能。JSX即Javascript XML,它是对JavaScript语法扩展。React使用JSX来替代常规的JavaScript。也可以认为JSX就是JavaScript。当遇到<,jsx就当HTML解析,遇到{就当JavaScript来解析。
jsx优点
快,执行速度更快,因为他在编译为JavaScript代码后进行了优化。
可以使用熟悉的语法仿照HTML来定义虚拟DOM。从而编写模板更加简单快速。
使用jsx
如果要使用JSX,需要得到语法的支持,你可以使用Babel来进行转换。在这篇文章当中直接引入Babel文件。

	```
	<!DOCTYPE html>
	<html lang="en">
	<head>
	    <meta charset="UTF-8">
	    <title>Title</title>
	    <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/react.development.js"></script>
	    <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/react-dom.development.js"></script>
	   <!--Babel 可以将 ES6 代码转为 ES5 代码,这样我们就能在目前不支持 ES6 浏览器上执行 React 代码。Babel 内嵌了对 JSX 的支持。-->   
	    <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/babel.min_.js"></script>
	</head>
	<body>
	    <div id="wrap"></div>
	</body>
	<script type="text/babel">
	    ReactDOM.render(
	        <h1>你好,世界</h1>,
	        document.querySelector("#wrap")
	    )
	</script>
	</html>
	```

以上代码中的模板就是用了JSX。如果我们要在模板中嵌套多个HTML标签,需要使用一个父元素对其进行包裹。将代码修改为:

	```
	<script type="text/babel">
	    ReactDOM.render(
	        <div>
	            <h1>张培跃</h1>
	            <h2>欢迎学习 React</h2>
	            <p>今天天气不错,挺风和日丽的!</p>
	        </div>,
	        document.querySelector("#wrap")
	    )
	</script>
	```

注意!!!!千万不要在最外层添加多个并列标签,否则会报错!另外如果为JSX代码用引号包裹起来的话,浏览器会认为是文本而不是HTML!

		```
		<script type="text/babel">
		    ReactDOM.render(
		        "<div>我不会被识别为HTML标签哦!</div>",
		        document.querySelector("#wrap")
		    )
		</script>
		```

单独放到文件内
咱们也可以将JSX代码单独放到一个文件上,供其它文件来调用 。首先创建一个名字为my_react.js的文件,代码如下:

	    ReactDOM.render(
	        <h1>我好帅!我好苦恼啊!</h1>,
	        document.getElementById('wrap')
	    );

然后在你的HTML文件当中引入该JS文件即可:

	    <!DOCTYPE html>
	    <html lang="en">
	    <head>
	        <meta charset="UTF-8">
	        <title>Title</title>
	        <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/react.development.js"></script>
	        <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/react-dom.development.js"></script>
	        <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/babel.min_.js"></script>
	    </head>
	    <body>
	        <div id="wrap"></div>
	    </body>
	    <script src="my_react.js" type="text/babel"></script>
	    </html>

当然你也可以将你的JSX放到外部文件中。创建一个名字为react-jsx.js的文件,内容如下:

    var myInfo=<h1>我好帅!我好苦恼啊!</h1>;

然后引入:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/react.development.js"></script>
        <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/react-dom.development.js"></script>
        <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/babel.min_.js"></script>
    </head>
    <body>
        <div id="wrap"></div>
    </body>
    <script src="react-jsx.js" type="text/babel"></script>
    <script type="text/babel">
        ReactDOM.render(
            myInfo,
            document.querySelector("#wrap")
        )
    </script>
    </html>

JSX当中的标签类型
在JSX语法中,使用的标签类型有两种:DOM类型的标签(div、span等)和React组件类型的标签(关注后面文章)。DOM类型的标签需要标签的首字母小写,React组件类型的标签需要首字母大写。React也是通过首字母的大小写来判断渲染的是哪种类型的标签。
React组件类型标签:

    function ZhangPeiYue(){
        return (
            <div>React组件类型标签</div>
        )
    }
    ReactDOM.render(
        //React组件类型标签
        <ZhangPeiYue/>,
        document.querySelector("#myApp")
    )

React组件类型标签:

    ReactDOM.render(
        //DOM类型标签
        <div>DOM类型标签</div>,
        document.querySelector("#myApp")
    )

JSX中的表达式
JSX是支持表达式的,用法很简单,你需要将表达式写到{}内即可。代码如下:

    <script type="text/babel">
        ReactDOM.render(
            <div>
                <p>{100+100}</p>
            </div>,
            document.querySelector("#wrap")
        )
    </script>

不过需要注意的是在JSX当中,是不能使用if else 的,不过可以使用三元运算表达式:

JSX上的style
如果要用JSX来添加样式,很简单,代码如下,此处不解释:

	    <script type="text/babel">
	        var ok=1;
	        var myStyle={
	            color:"red",
	            fontSize:50
	        }
	        ReactDOM.render(
	            <div>
	                <p style={myStyle}>{ok==1?"我很帅":"我很有才华"}</p>
	            </div>,
	            document.querySelector("#wrap")
	        )
	    </script>

或者:

    <script type="text/babel">
        var ok=1;
        ReactDOM.render(
            <div>
                <p style={{
                    color:"red",
                    fontSize:50
                }}>{ok==1?"我很帅":"我很有才华"}</p>
            </div>,
            document.querySelector("#wrap")
        )
    </script>

JSX上的数组输出
JSX可以直接在模板输出JavaScript变量。如果这个变量是一个数组,会自动展开所有元素。是不是很给力?哈

    <script type="text/babel">
        var arr=[
            <h1>你是风儿</h1>,
            <h2>我是沙</h2>,
            <h3>缠缠绵绵到天涯</h3>
        ];
        ReactDOM.render(
            <div>
                {arr}
            </div>,
            document.querySelector("#wrap")
        )
    </script>

咱们也可以利用数组的map属性来对其进行数据列表渲染:

	    <script type="text/babel">
	        var arr=["你是风儿","我是沙","缠缠绵绵到天涯"];
	        var lis=arr.map(function(v){
	            return <h3>{v}</h3>
	        })
	        ReactDOM.render(
	            <div>
	                {lis}
	            </div>,
	            document.querySelector("#wrap")
	        )
	    </script>

JSX当中的注释
只需要将注释写到{}当中即可,如下:

    <script type="text/babel">
        var arr=[
            <h1>你是风儿</h1>,
            <h2>我是沙</h2>,
            <h3>缠缠绵绵到天涯</h3>
        ];
        ReactDOM.render(
            <div>
                {
                    /*前
                    * 行
                    * 注
                    * 释*/
                    // 单行注释
                    // arr
                }
            </div>,
            document.querySelector("#wrap")
        )
    </script>

JSX其实就是JavaScript。一些关键字不要作为XML的属性名。例如:for,if,class 。另外大括号里是JavaScript,不要加引号,加引号就会被当成字符串。

作者:张培跃
链接:https://www.jianshu.com/p/e77a3b214d74
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

 类似资料: