React从基础入门到高级实战:React 基础入门 - JSX与组件基础

JSX 与组件基础

引言

在 React 开发中,JSX组件 是两个最基础且核心的概念。JSX 是一种独特的语法,让你在 JavaScript 中编写类似 HTML 的代码,而组件则是 React 应用的基本构建块,帮助你将复杂的界面拆分为可复用的模块。本文将带你深入理解 JSX 的语法规则,并学习如何创建和使用 React 组件。通过本文,你将能够编写自己的组件,为后续的 React 开发打下坚实基础。


1. 什么是 JSX?

JSX(JavaScript XML)是 JavaScript 的语法扩展,允许你在代码中直接编写类似 HTML 的标签结构。它让 React 组件的 UI 编写变得直观且易读。

通俗比喻

想象 JSX 是 JavaScript 的"画笔",你可以用熟悉的 HTML 标签"画"出界面,而 React 会把这些"画"变成真实的网页元素。

基本示例

jsx 复制代码
const element = <h1>Hello, React!</h1>;

这段 JSX 会在页面渲染一个 <h1> 标题。


2. JSX 语法规则

尽管 JSX 看起来像 HTML,但它有自己的规则:

  • 标签必须闭合 :所有标签都需要闭合,比如 <img> 要写成 <img />
  • 属性命名 :使用 camelCase,例如 className(代替 HTML 的 class)、onClick(代替 onclick)。
  • 嵌入表达式 :用 {} 将 JavaScript 表达式嵌入 JSX,比如 {name}{1 + 1}
  • 不支持 if-else :不能直接在 JSX 中写 if-else,但可以用三元运算符或逻辑运算符。

示例

jsx 复制代码
const name = "React";
const element = <p className="greeting">Hello, {name}!</p>;

渲染结果:<p> 标签显示 "Hello, React!",并应用 greeting 类样式。


3. JSX 中的表达式

JSX 支持在 {} 中嵌入 JavaScript 表达式,比如变量、函数调用或运算。

示例

jsx 复制代码
const user = { firstName: 'Jane', lastName: 'Doe' };
const fullName = () => user.firstName + ' ' + user.lastName;

const element = <p>欢迎, {fullName()}!</p>;

渲染结果:"欢迎, Jane Doe!"。

注意

  • {} 内只能放表达式,不能放语句(比如 iffor)。
  • 可以嵌入数组,React 会自动展平渲染。

4. React 组件基础

React 应用由多个组件 组成,每个组件负责渲染一小块 UI,可以组合成复杂界面。组件分为函数组件类组件,现代 React 更推荐使用函数组件。

4.1 函数组件

函数组件是一个返回 JSX 的 JavaScript 函数。

示例

jsx 复制代码
function Welcome(props) {
  return <h1>Hello, {props.name}!</h1>;
}
  • props:父组件传递的数据对象。
  • 组件名需大写开头,如 Welcome
4.2 类组件(了解即可)

类组件使用 ES6 类语法,包含 render 方法返回 JSX。

示例

jsx 复制代码
class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}!</h1>;
  }
}

趋势:有了 Hooks,函数组件更简洁,已成为主流。


5. 组件的创建与复用

组件可以通过嵌套复用 构建复杂 UI。父组件通过 props 向子组件传递数据。

示例

jsx 复制代码
function App() {
  return (
    <div>
      <Welcome name="Alice" />
      <Welcome name="Bob" />
    </div>
  );
}

function Welcome(props) {
  return <p>欢迎, {props.name}!</p>;
}

渲染结果:显示两条欢迎消息,分别是 "欢迎, Alice!" 和 "欢迎, Bob!"。


6. 实践:用户卡片组件

让我们通过一个简单的 UserCard 组件实践 JSX 和组件的使用。

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>React JSX 与组件基础</title>
  <script src="https://cdn.jsdelivr.net/npm/react@18/umd/react.development.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/react-dom@18/umd/react-dom.development.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/babel-standalone@6/babel.min.js"></script>
</head>
<body>
  <div id="root"></div>
  <script type="text/babel">
    function UserCard(props) {
      return (
        <div style={{ border: '1px solid #ccc', padding: '10px', margin: '10px' }}>
          <h2>{props.name}</h2>
          <p>年龄: {props.age}</p>
          <p>职业: {props.job}</p>
        </div>
      );
    }

    function App() {
      return (
        <div>
          <UserCard name="Alice" age={25} job="工程师" />
          <UserCard name="Bob" age={30} job="设计师" />
        </div>
      );
    }

    ReactDOM.render(<App />, document.getElementById('root'));
  </script>
</body>
</html>

说明

  • UserCard 组件接收 nameagejob 三个 props,渲染用户信息。
  • App 组件嵌套两个 UserCard,展示不同用户。
  • 打开浏览器开发者工具,粘贴以上代码到 HTML 文件运行,即可看到效果。

7. 总结

本文介绍了 JSX 的语法规则和 React 组件的基本创建与使用。通过实践,你已经能编写简单的组件并组合它们。掌握这些基础将帮助你在 React 开发中更进一步。

有任何疑问,欢迎交流,一起进步!

相关推荐
Kakarotto1 小时前
Canvas 直线点击事件处理优化
javascript·vue.js·canvas
顺遂1 小时前
基于Rokid CXR-M SDK的引导式作业辅导系统设计与实现
前端
代码搬运媛1 小时前
Generator 迭代器协议 & co 库底层原理+实战
前端
前端拿破轮1 小时前
从0到1搭建个人网站(三):用 Cloudflare R2 + PicGo 搭建高速图床
前端·后端·面试
功能啥都不会1 小时前
PM2 使用指南 - 踩坑记录
前端
HelloReader1 小时前
React 中 useState、useEffect、useRef 的区别与使用场景详解,终于有人讲明白了
前端
兆子龙1 小时前
CSS 里的「if」:@media、@supports 与即将到来的 @when/@else
前端
踩着两条虫1 小时前
AI 智能体如何重构开发工作流
前端·人工智能·低代码
代码老中医2 小时前
逃离"Div汤":2026年,当AI写了75%的代码,前端开发者还剩什么?
前端
进击的尘埃2 小时前
Playwright Component Testing 拆到底:组件怎么挂上去的,快照怎么在 CI 里不翻车
javascript