JSX | 青训营

76 阅读2分钟

JSX 是 JavaScript 语法扩展,可以让你在 JavaScript 文件中书写类似 HTML 的标签。虽然还有其它方式可以编写组件,但大部分 React 开发者更喜欢 JSX 的简洁性,并且在大部分代码库中使用它。

  • 为什么 React 将标签和渲染逻辑耦合在一起

一开始js和html,css都是分开放的,但是web交互性变得越来越强,逻辑越来越决定页面内容,所以react将渲染逻辑和标签放在一起(组件)

  • JSX 与 HTML 有什么区别

JSX语法规则:

只能返回一个根元素

  1. 为什么?因为JSX最后会编译为render函数,在底层转换为JavaScript对象,而不能在一个函数中返回多个对象,除非用一个数组把他们包起来,所以只能返回一个根元素或者用一个父元素或者Fragment包裹

标签必须闭合

  1. 自闭合标签如必须写成
  2. 只有开始标签的元素需要改写成闭合标签,例如
  3. 改写成

使用驼峰命名大部分属性

  1. JSX最终会被转换为JavaScript,JSX属性也会被转换为js对象中的键值对

区别:

  • 需要在JSX中返回单个父元素,HTML则可以任意操作

  • 可以在JSX中实现js,放在{ ... }中即可,HTML需要脚本标签引入或者外部js文件

  • JSX中所有标签自闭合,也就是说,可以将写成

    ,将 写成 。HTML 中的自闭合标签可以在右尖括号没有斜线的情况下自闭合,即
    可以写成
    。但是在 JSX 中,需要加上斜杠。

  • JSX定义class和for属性,要定义为className和HTMLFor属性,因为class和for是js中的保留字

  • JSX中使用驼峰命名写所有HTML属性,例如onclick 要写成 onClick,接近JavaScript

  • JSX将内联对象编写为一个对象,属性采用驼峰命名,值在引号中,内联传给JSX。不建议

内联对象属性需要驼峰命名,例如background-color要写成backgroundColor

        const inlineStyle = { 
            color: "#2ecc71", 
            fontSize: "26px", 
        }; 
        return ( <> 
            <div className="container">
                <p style={inlineStyle}>Hi campers</p> 
                <p>How's coding going</p> 
                <p>What is up?</p> 
                {new Date().toDateString()} <br/> <br/> {2 + 5} is seven in word <br/> 
                <button onClick={sayHI}>ALert Hi</button> 
            </div> 
           </>
          ); 
       }; 
       export default Article;