React JSX 基础

ReactBeginner
立即练习

介绍

欢迎来到 React 的世界!在本实验中,你将深入了解 JSX,它是使用 React 构建用户界面的基础部分。JSX (JavaScript XML) 是 JavaScript 的一种语法扩展,它允许你在 JavaScript 文件中直接编写类似 HTML 的代码。这使得你的 UI 代码更具可读性、表现力,并且更易于维护。

在本实验中,你将学习 JSX 的核心规则,包括:

  • 编写类似 HTML 的元素。
  • 嵌入动态 JavaScript 表达式。
  • 应用 CSS 类。
  • 使用自闭合标签。
  • 使用 Fragments 将多个元素分组。

一个基础的 React 项目已在 ~/project/my-app 目录中为你设置好。让我们开始吧!

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 94%。获得了学习者 100% 的好评率。

在组件 return 中编写类似 h1 的 JSX 元素

在本步骤中,你将编写一个基础的 JSX 元素,并看到它在浏览器中渲染。JSX 允许你在 React 组件中直接编写看起来非常像 HTML 的标记语言。

首先,让我们运行开发环境。你所有的工作都将在 ~/project/my-app 目录下进行。

在终端中导航到项目目录,安装必要的依赖项,然后启动开发服务器。

cd ~/project/my-app
npm install

安装完成后,运行以下命令启动开发服务器:

npm run dev -- --host 0.0.0.0 --port 8080

你将看到输出表明服务器正在运行。现在,点击屏幕顶部的 Web 8080 标签页,查看你的实时应用程序。它应该显示 "Hello, React!"。

接下来,从左侧的文件浏览器中打开 src/App.jsx 文件。该文件包含一个名为 App 的简单 React 组件。

让我们修改 h1 元素。将 <h1> 标签内的文本更改为 "Welcome to JSX"。

用以下代码替换 src/App.jsx 的内容:

import "./App.css";

function App() {
  return <h1>Welcome to JSX</h1>;
}

export default App;

保存文件 (Ctrl+S 或 Cmd+S)。Web 8080 标签页中的应用程序将自动更新,显示新文本。

使用花括号嵌入 JavaScript 表达式

在本步骤中,你将学习如何使用花括号 {} 将 JavaScript 表达式直接嵌入到你的 JSX 中。这是一个强大的功能,允许你渲染动态内容。

你可以在花括号内放置任何有效的 JavaScript 表达式。这可以是一个变量、一个函数调用或一个算术运算。

让我们修改 App 组件来显示一个动态标题。再次打开 src/App.jsx 文件。

App 函数中,return 语句之前,声明一个名为 title 的 JavaScript 常量,并为其分配一个字符串值。然后,在 <h1> 元素中使用这个常量。

用以下代码更新你的 src/App.jsx 文件:

import "./App.css";

function App() {
  const title = "React JSX Basics";

  return <h1>{title}</h1>;
}

export default App;

保存文件。现在,查看 Web 8080 标签页。你将看到标题已更新为 "React JSX Basics"。React 会评估 {title} 表达式,并将其值渲染为 <h1> 标签的内容。

添加 className 属性以应用 CSS 类

在本步骤中,你将学习如何为你的 JSX 元素添加 CSS 类以进行样式设置。

在普通的 HTML 中,你使用 class 属性来分配一个 CSS 类。然而,class 是 JavaScript 中的一个保留关键字。为了避免冲突,JSX 使用 className 代替。

首先,让我们添加一个样式规则。打开 src/App.css 文件,并添加以下 CSS 代码来为我们的标题定义样式:

.title-style {
  color: #61dafb;
  text-align: center;
}

保存 src/App.css 文件。

现在,让我们将这个类应用到我们的 <h1> 元素上。打开 src/App.jsx,并在 h1 标签中添加 className 属性。

将你的 src/App.jsx 文件更新为如下内容:

import "./App.css";

function App() {
  const title = "React JSX Basics";

  return <h1 className="title-style">{title}</h1>;
}

export default App;

保存文件并切换到 Web 8080 标签页。你现在应该看到标题文本居中并显示为浅蓝色,这与你在 App.css 中定义的样式一致。

为 img 元素使用自闭合标签

在本步骤中,你将学习如何在 JSX 中使用自闭合标签。在 HTML 中,一些元素如 <img><br><input> 是“空”或“无效”元素,这意味着它们没有闭合标签。

在 JSX 中,你必须显式地闭合每个标签。对于没有子元素的元素,你使用自闭合语法,在闭合的尖括号前添加一个斜杠 /,例如 <img />

一个 React 组件只能返回一个根元素。要渲染多个元素,你必须将它们包裹在一个容器中,例如 <div>

让我们在标题下方添加一个图片。我们将把 <h1> 和新的 <img> 标签都包裹在一个 <div> 中。

用以下代码更新你的 src/App.jsx 文件:

import "./App.css";

function App() {
  const title = "React JSX Basics";
  const imageUrl = "https://labex.io/_ipx/s_98x30/labex-logo-light.svg";

  return (
    <div>
      <h1 className="title-style">{title}</h1>
      <img src={imageUrl} alt="LabEx Logo" width="200" />
    </div>
  );
}

export default App;

在这段代码中,我们添加了一个 <img> 标签。请注意它是自闭合的 (/>)。我们还使用了花括号从 imageUrl 变量动态设置了 src 属性。

保存文件并查看 Web 8080 标签页。你将看到 LabEx logo 显示在标题下方。

使用 fragment <> </> 渲染多个元素

在本步骤中,你将学习一种更好的方法来组合多个元素,而无需向 DOM 添加额外的节点:React Fragments。

在上一步中,我们使用 <div> 来包裹 <h1><img> 元素,因为一个组件必须返回一个单一的根元素。然而,有时这个额外的 <div> 是不必要的,并且可能会干扰你的 CSS 布局(例如,使用 Flexbox 或 Grid 时)。

React 提供了一个名为 Fragments 的解决方案。Fragment 允许你组合一系列子元素,而无需向 DOM 添加额外的节点。你可以使用简写语法 <> ... </>

让我们重构我们的 App 组件,使用 Fragment 代替 <div>

打开 src/App.jsx 文件,并将开头的 <div> 和结尾的 </div> 分别替换为 <></>

你最终的 src/App.jsx 代码应该如下所示:

import "./App.css";

function App() {
  const title = "React JSX Basics";
  const imageUrl = "https://labex.io/_ipx/s_98x30/labex-logo-light.svg";

  return (
    <>
      <h1 className="title-style">{title}</h1>
      <img src={imageUrl} alt="LabEx Logo" width="200" />
    </>
  );
}

export default App;

保存文件。在 Web 8080 标签页中的视觉输出将与上一步完全相同。但是,如果你在浏览器的开发者工具中检查 HTML,你会发现 <h1><img> 元素现在是直接的同级元素,没有父 <div>。这创建了一个更简洁、更高效的 DOM 结构。

总结

恭喜你完成了 React JSX Basics 实验!你已经学习了在 React 应用中编写 UI 的基本规则和语法。

在本实验中,你练习了:

  • 在组件的 return 语句中编写类似 HTML 的元素,如 <h1>
  • 使用花括号 {} 将动态的 JavaScript 变量和表达式嵌入到你的标记中。
  • 使用 className 属性应用 CSS 类。
  • 使用 /> 语法为 <img> 等元素使用自闭合标签。
  • 使用 React Fragments (<> </>) 将多个元素分组,而无需添加额外的 DOM 节点。

这些概念是使用 React 创建复杂和动态用户界面的基石。继续练习,以便更熟练地掌握 JSX 的强大功能和灵活性。