1371 字
7 分钟

React核心概念

React核心概念#

1. JSX语法#

JSX是JavaScript的语法扩展,允许你在JavaScript中编写类似HTML的代码。虽然不是必须使用的,但它是React开发中最常用的方式。

基本语法#

// JSX示例
const element = <h1>Hello, React!</h1>;
// 在JSX中使用表达式
const name = 'React';
const element = <h1>Hello, {name}!</h1>;
// 在JSX中使用函数
function formatName(user) {
return user.firstName + ' ' + user.lastName;
}
const user = {
firstName: 'John',
lastName: 'Doe'
};
const element = <h1>Hello, {formatName(user)}!</h1>;

JSX的特点#

  • JSX会被编译为JavaScript代码
  • 可以在JSX中使用任何JavaScript表达式,只需用花括号包裹
  • JSX本身也是一个表达式,编译后会生成React元素
  • 可以在if语句和for循环中使用JSX
  • 可以给JSX添加属性,使用引号指定字符串字面量作为属性值,或使用花括号指定JavaScript表达式作为属性值
  • 可以在JSX中使用子元素
  • 由于JSX更接近JavaScript,React DOM使用camelCase(小驼峰命名)来定义属性名称,而不是HTML的命名约定

2. 组件#

组件是React应用的构建块,允许你将UI拆分为独立、可复用的部分。

函数组件#

函数组件是最基本的组件形式,是一个接收props并返回React元素的函数。

function Greeting(props) {
return <h1>Hello, {props.name}!</h1>;
}
// 使用组件
const element = <Greeting name="React" />;

类组件#

类组件是使用ES6类语法定义的组件,需要继承React.Component并实现render方法。

class Greeting extends React.Component {
render() {
return <h1>Hello, {this.props.name}!</h1>;
}
}
// 使用组件
const element = <Greeting name="React" />;

注意:在现代React中,函数组件配合Hooks已经成为主流,类组件的使用场景越来越少。

3. Props#

Props是组件的输入,是从父组件传递给子组件的数据。Props是只读的,组件不能修改自己的props。

// 父组件
function App() {
return (
<div>
<Greeting name="Alice" />
<Greeting name="Bob" />
</div>
);
}
// 子组件
function Greeting(props) {
return <h1>Hello, {props.name}!</h1>;
}

默认Props#

可以为组件设置默认的props值,当父组件没有传递相应的props时,会使用默认值。

function Greeting(props) {
return <h1>Hello, {props.name}!</h1>;
}
// 设置默认props
Greeting.defaultProps = {
name: 'Guest'
};
// 不传递name属性时,会使用默认值
const element = <Greeting />;

4. State#

State是组件的内部数据,用于存储组件的状态信息。与props不同,state是可变的,组件可以修改自己的state。

在函数组件中使用State(使用useState Hook)#

import React, { useState } from 'react';
function Counter() {
// 声明一个名为count的state变量,初始值为0
const [count, setCount] = useState(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}

在类组件中使用State#

class Counter extends React.Component {
constructor(props) {
super(props);
// 初始化state
this.state = {
count: 0
};
}
render() {
return (
<div>
<p>You clicked {this.state.count} times</p>
<button onClick={() => this.setState({ count: this.state.count + 1 })}>
Click me
</button>
</div>
);
}
}

5. 事件处理#

React中的事件处理与DOM中的事件处理类似,但有一些语法差异:

  • React事件使用camelCase命名,而不是小写
  • 在JSX中,事件处理函数作为表达式传递,而不是字符串
function Button() {
function handleClick() {
alert('Button clicked!');
}
return (
<button onClick={handleClick}>
Click me
</button>
);
}

向事件处理函数传递参数#

function Button() {
function handleClick(name) {
alert(`Hello, ${name}!`);
}
return (
<button onClick={() => handleClick('React')}>
Click me
</button>
);
}

6. 条件渲染#

React允许你根据条件渲染不同的内容。

使用if语句#

function Greeting(props) {
if (props.isLoggedIn) {
return <h1>Welcome back!</h1>;
} else {
return <h1>Please sign up.</h1>;
}
}

使用三元运算符#

function Greeting(props) {
return (
<div>
{props.isLoggedIn ? (
<h1>Welcome back!</h1>
) : (
<h1>Please sign up.</h1>
)}
</div>
);
}

使用与运算符(&&)#

function Notification(props) {
return (
<div>
{props.unreadCount > 0 && (
<p>You have {props.unreadCount} unread messages.</p>
)}
</div>
);
}

7. 列表渲染#

React允许你使用map()方法来渲染列表。

function NumberList(props) {
const numbers = props.numbers;
const listItems = numbers.map((number) =>
<li key={number.toString()}>
{number}
</li>
);
return (
<ul>{listItems}</ul>
);
}
const numbers = [1, 2, 3, 4, 5];
const element = <NumberList numbers={numbers} />;

关于key#

在渲染列表时,每个列表项都需要一个唯一的key属性,用于React识别哪些项发生了变化、被添加或被移除。key应该是稳定的、唯一的,并且不会在渲染之间发生变化。

最好使用每个项的唯一ID作为key。如果没有唯一ID,可以使用项的索引作为key,但这不是最优解,特别是当列表项可能被重新排序时。

练习#

  1. 创建一个简单的React组件,显示你的名字和年龄。
  2. 创建一个计数器组件,能够增加和减少计数。
  3. 创建一个列表组件,显示一组水果的名称。
  4. 创建一个条件渲染组件,根据用户是否登录显示不同的内容。

总结#

在本章节中,我们学习了React的核心概念和基础语法,包括:

  • JSX语法:在JavaScript中编写类似HTML的代码
  • 组件:React应用的构建块,分为函数组件和类组件
  • Props:从父组件传递给子组件的数据,只读
  • State:组件的内部数据,可变
  • 事件处理:处理用户交互
  • 条件渲染:根据条件显示不同的内容
  • 列表渲染:使用map()方法渲染列表

这些核心概念是React开发的基础,掌握它们将帮助你构建更复杂的React应用。在接下来的章节中,我们将学习更多高级特性,如Hooks、生命周期方法、表单处理等。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

React核心概念
https://firefly.cuteleaf.cn/posts/react/03-react-core-concepts/
作者
Lireal
发布于
2026-01-21
许可协议
CC BY-NC-SA 4.0

目录