7 JSX 语法基础

在前一篇中,我们介绍了 React 应用的基本文件结构。在这篇文章中,我们将深入了解 JSX,这是 React 中一个非常重要且独特的概念。理解 JSX 是掌握 React 的关键之一,因为它简化了在 JavaScript 代码中编写 HTML 结构的方式。

什么是 JSX?

JSX 是 JavaScript XML 的缩写,它允许我们在 JavaScript 代码中编写类似 HTML 的语法。虽然你可以使用传统的 JavaScript 来创建 React 元素,但 JSX 使得创建组件的过程更加直观和方便。

使用 JSX,你可以将组件结构直接嵌入到 JavaScript 代码中,这使得组件的视觉结构和逻辑定义更为紧密。

示例

以下是一个简单的 JSX 示例:

1
const element = <h1>Hello, world!</h1>;

在这个例子中,我们创建了一个 React 元素 element,它是一个包含 “Hello, world!” 的 h1 标题。

JSX 语法规则

尽管 JSX 看起来类似于 HTML,但有一些需要遵循的规则:

  1. 单根节点:每个 JSX 元素必须有一个单一的根节点。例如,如果你需要返回多个元素,可以将它们包裹在一个 div 元素中,或者使用 React Fragment

    1
    2
    3
    4
    5
    6
    const element = (
    <div>
    <h1>Hello, world!</h1>
    <p>欢迎使用 React!</p>
    </div>
    );

    或者使用 React Fragment

    1
    2
    3
    4
    5
    6
    const element = (
    <>
    <h1>Hello, world!</h1>
    <p>欢迎使用 React!</p>
    </>
    );
  2. 属性:JSX 中的属性使用 camelCase 语法,而不是 HTML 中的常规小写。例如,使用 className 而不是 class

    1
    const element = <div className="my-class">内容</div>;
  3. 表达式:你可以在 JSX 中使用 JavaScript 表达式,只需要将其放在花括号 {} 中。这使得内容的动态渲染变得十分容易。

    1
    2
    const name = "React";
    const element = <h1>Hello, {name}!</h1>;

如何编译 JSX?

虽然我们在 JavaScript 代码中使用 JSX,浏览器并不能直接理解这些语法。为了使其可运行,JSX 被转译为 React.createElement() 调用。例如:

1
const element = <h1>Hello, world!</h1>;

经过编译后,变成了:

1
const element = React.createElement('h1', null, 'Hello, world!');

为了使用 JSX,我们通常会借助像 Babel 这样的工具,它可以在构建过程中自动将 JSX 转换为 JavaScript。

嵌套与条件渲染

嵌套 JSX

在 JSX 中,你可以嵌套其他 JSX 元素。React 允许我们将组件嵌套,实现更加复杂的 UI。

1
2
3
4
5
6
const App = () => (
<div>
<h1>欢迎</h1>
<p>这是一个使用 JSX 的示例。</p>
</div>
);

条件渲染

我们还可以在 JSX 中进行条件渲染,这通过 JavaScript 表达式实现:

1
2
3
4
5
6
const isLoggedIn = true;
const element = (
<div>
{isLoggedIn ? <h1>欢迎回来!</h1> : <h1>请登录.</h1>}
</div>
);

在上面的例子中,当 isLoggedIntrue 时,渲染 “欢迎回来!”,否则渲染 “请登录.”。

总结

在本篇中,我们了解了 JSX 是什么以及如何在 React 中使用它。我们讨论了 JSX 的基本语法规则,包括如何创建元素、使用属性和嵌套结构。通过示例,我们展示了如何通过 JSX 渲染动态内容。

理解 JSX 是学习 React 的基础,而下一篇中我们将探讨另一个核心概念——虚拟 DOM。继续保持对 React 的好奇,我们下篇见!

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论