• 学习JSX
    • 技术的退步?
    • 为何使用 JSX
    • 需要注意的问题
      • 属性的声明
      • 组件的声明需要大写

    学习JSX

    JSX 在 React 中是很重要的一个组成部分,用于展示 DOM 结构与应用中的数据展示。

    在基础部分中,我们已经见识过 JSX 了:

    1. ReactDOM.render(
    2. <h1>Hello, world!</h1>,
    3. document.getElementById('example')
    4. );

    其中render 方法的第一个参数就是一个由 JSX 语法编写的 DOM 结构。

    技术的退步?

    关于JSX,相信很多人会觉得这是一种技术的退步。

    因为我们以前在进行前端开发的时候,总是会把 HTML、 CSS 和 JavaScript 进行分离 — 这也是很容易理解的一点,把用户界面中的结构、样式、逻辑分开,便于开发和维护。

    但是 JSX 似乎在历史的道路上往回走了,不仅给应用带来了一堆 XML 一样的标签,而且将事件与 DOM 结构混合在了一起,例如以下 JSX:

    1. <a
    2. onClick={() => {
    3. console.log('Click!');
    4. }}
    5. >Button</>

    为何使用 JSX

    JSX 并不是以模板语言的姿态出现在 React 之中的。

    在 React 之中,如果没有 JSX,就需要通过另外的方式来创建 Virtual DOM:

    1. React.createElement('h1', { className: 'title' }, 'Title');

    其实这也是 React 实际工作的代码,虽然这样的代码看起来也不是很繁琐,但是想象一下用这样的方式来构建一个大型的应用呢?

    JSX 则是出现改变这种编码方式的解决方案:

    1. <h1 className="title">Title</h1>

    这样既可以让应用的结构变得清晰(主要指的是 DOM 结构)、语义化,又加快了编码的速度和可读性。

    需要注意的问题

    属性的声明

    在 JSX 中,属性的声明不完全相同于我们所熟悉的 HTML 语法,甚至有比较大的出入,例如上文中提到的 <h1 className="title">Title</h1> 以及 <label htmlFor="name">Name:</label> 等。而在 HTML 语法中,我们则是直接使用 classfor 作为属性的。

    造成这种写法上的不同就是因为 JSX 实际上是一种用类似 HTML 结构的 JavaScript 语法,而 classfor 都是 JavaScript 中的关键词,因此要使用不同的标签进行书写。

    组件的声明需要大写

    很多人在学习 React 的时候可能没有注意将组件声明为大写字母开头的名称,导致代码无法正常运行的情况。

    React 之所以这么做是为了避免在 JSX 中混淆了 HTML 标签和 React 组件的声明。