React 学习笔记(2)认识jsx语法

153 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

Jsx 语法

JSX是基于 JavaScript + XML 的一个扩展语法。

这种语法最先在React中使用

代码

创建一个虚拟dom并渲染到Html页面

<!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">
    <style>
        .title{
            background-color: aquamarine;
        }
    </style>
    <title>学习React</title>
</head>
<body>
    <div id="test"></div>
    <script type="text/javascript" src="../js/react.development.js"></script>
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <script type="text/javascript" src="../js/babel.min.js"></script>
    <script type="text/babel">
        const myId = 'Hello'
        const myData = 'boomxiakalaka'
        const VDOM =(
           <h2 id={myId.toLowerCase()} className='title'>
                <span style={{color:'red',fontSize:'100px'}}>{myData.toLowerCase()}</span>
            </h2>

       )
        ReactDOM.render(VDOM,document.getElementById('test'))

    </script>
</body>
</html>

总结

定义虚拟DOM时,不要写引号

看上面的代码const VDOM = (...)用的是括号, 假如使用的是''就会把引号里面所有的内容当作成字符串处理渲染到浏览器,不会识别任何的Html标签

image.png

标签种混入JS表达式时要用{}

上面代码使用了.toLowerCase()方法,在Javascript中是把英文字符转为小写的方法,其中的变量myIdmyData使用了jsx语法定义的变量,跟js一样没有区别。

样式的类名指定不要用class,要用className

h2标签种使用className定义了一个类名,正确匹配到了在html文件上方使用内部样式定义的style样式,把h2标签背景色改成了绿色,现在看下使用class会报什么错:

image.png 虽然报错了,但是实际还是有效果

内联样式,要用style={{key:value}}的形式去写

内联样式定义了两个css效果,上图可以看出来是正常的,这个还比较特别,但是不常用,只是需要注意一下就行了

只有一个根标签

在VDOM这个变量定义了一个虚拟dom,但是最外层只有一个h2标签,假如再加一个同级的任何标签就会报错,我们来看下报什么错:

image.png

标签必须闭合

标签必须闭合,这是开发规范和尝试,但是我自己尝试了一下,在jsx里使用br标签需要这样写才不会报错: <br>
在普通的html中随意下面两种都不会报错: <br> ,</br> 所以说在jsx中是非常严格的,不管是自闭合标签还是非自闭合标签都要严格遵守闭合要求

标签首字母

若小写字母开头,则将该标签转为html种同名元素,若html种无该标签对应的同名元素,则报错

上面代码中只有两个标签h2span,首字母都是小写,都是正常普通的的html,假如不是就会报错, 要注意的是在普通的html文件中使用大写的字母的标签是不会报错的,例如:

image.png 在jsx中使用报错:

image.png

若大写字母开头,react就去渲染对应的组件,若组件没有定义则报错

组件分为函数式组件和类组件,我们后面会了解到组件是React一个必要的东西