Pixiv - SWKL:D
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>;}
// 设置默认propsGreeting.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,但这不是最优解,特别是当列表项可能被重新排序时。
练习
- 创建一个简单的React组件,显示你的名字和年龄。
- 创建一个计数器组件,能够增加和减少计数。
- 创建一个列表组件,显示一组水果的名称。
- 创建一个条件渲染组件,根据用户是否登录显示不同的内容。
总结
在本章节中,我们学习了React的核心概念和基础语法,包括:
- JSX语法:在JavaScript中编写类似HTML的代码
- 组件:React应用的构建块,分为函数组件和类组件
- Props:从父组件传递给子组件的数据,只读
- State:组件的内部数据,可变
- 事件处理:处理用户交互
- 条件渲染:根据条件显示不同的内容
- 列表渲染:使用map()方法渲染列表
这些核心概念是React开发的基础,掌握它们将帮助你构建更复杂的React应用。在接下来的章节中,我们将学习更多高级特性,如Hooks、生命周期方法、表单处理等。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
Lirael's Tech Firefly