- ReactJS 教程
- ReactJS - 首页
- ReactJS - 简介
- ReactJS - 路线图
- ReactJS - 安装
- ReactJS - 特性
- ReactJS - 优点与缺点
- ReactJS - 架构
- ReactJS - 创建 React 应用
- ReactJS - JSX
- ReactJS - 组件
- ReactJS - 嵌套组件
- ReactJS - 使用新创建的组件
- ReactJS - 组件集合
- ReactJS - 样式
- ReactJS - 属性 (props)
- ReactJS - 使用属性创建组件
- ReactJS - props 验证
- ReactJS - 构造函数
- ReactJS - 组件生命周期
- ReactJS - 事件管理
- ReactJS - 创建一个事件感知组件
- ReactJS - 在 Expense Manager 应用中引入事件
- ReactJS - 状态管理
- ReactJS - 状态管理 API
- ReactJS - 无状态组件
- ReactJS - 使用 React Hooks 进行状态管理
- ReactJS - 使用 React Hooks 进行组件生命周期管理
- ReactJS - 布局组件
- ReactJS - 分页
- ReactJS - Material UI
- ReactJS - Http 客户端编程
- ReactJS - 表单编程
- ReactJS - 受控组件
- ReactJS - 非受控组件
- ReactJS - Formik
- ReactJS - 条件渲染
- ReactJS - 列表
- ReactJS - Keys
- ReactJS - 路由
- ReactJS - Redux
- ReactJS - 动画
- ReactJS - Bootstrap
- ReactJS - 地图
- ReactJS - 表格
- ReactJS - 使用 Flux 管理状态
- ReactJS - 测试
- ReactJS - CLI 命令
- ReactJS - 构建和部署
- ReactJS - 示例
- Hooks
- ReactJS - Hooks 简介
- ReactJS - 使用 useState
- ReactJS - 使用 useEffect
- ReactJS - 使用 useContext
- ReactJS - 使用 useRef
- ReactJS - 使用 useReducer
- ReactJS - 使用 useCallback
- ReactJS - 使用 useMemo
- ReactJS - 自定义 Hooks
- ReactJS 高级
- ReactJS - 可访问性
- ReactJS - 代码分割
- ReactJS - Context
- ReactJS - 错误边界
- ReactJS - 转发 Refs
- ReactJS - Fragments
- ReactJS - 高阶组件
- ReactJS - 与其他库集成
- ReactJS - 优化性能
- ReactJS - Profiler API
- ReactJS - Portals
- ReactJS - 无需 ES6 ECMAScript 的 React
- ReactJS - 无需 JSX 的 React
- ReactJS - 调和
- ReactJS - Refs 和 DOM
- ReactJS - Render Props
- ReactJS - 静态类型检查
- ReactJS - Strict Mode
- ReactJS - Web Components
- 其他概念
- ReactJS - 日期选择器
- ReactJS - Helmet
- ReactJS - 内联样式
- ReactJS - PropTypes
- ReactJS - BrowserRouter
- ReactJS - DOM
- ReactJS - 轮播图
- ReactJS - 图标
- ReactJS - 表单组件
- ReactJS - 参考 API
- ReactJS 有用资源
- ReactJS - 快速指南
- ReactJS - 有用资源
- ReactJS - 讨论
ReactJS - 构造函数
一般来说,类中的构造函数方法用于设置新创建对象的初始值。React 也使用 constructor() 来实现相同的初始化目的。然而在 React 中,构造函数也用于状态初始化和事件绑定。
本章我们将学习如何在 React 组件中使用构造函数。
属性初始化
众所周知,每个 React 组件都有 props 和 state。应该使用 super 关键字在构造函数中初始化 props。如果在基于类的 React 组件中没有正确初始化 props,则 this.props 将无法正常工作并导致错误。让我们创建一个具有正确构造函数方法的简单组件。
class Welcome extends React.Component { constructor(props) { super(props); } render() { return ( <div><h3>Welcome {this.props.name}</h3></div> ) } }
这里:
super(props) 将在 Welcome 组件中初始化 props。
this.props.* 将提供对 props 详情的访问。
组件可以使用如下所示:
function App() { return ( <div className="container"> <div style={{ padding: "10px" }}> <div> <Welcome name={'John'} /> </div> </div> </div> ); }
组件将渲染欢迎消息,如下所示:
状态初始化
与 props 初始化类似,状态初始化非常重要,可以在构造函数中完成。一般来说,React 提供了不同的方法来设置和获取组件中的状态信息。它们如下:
使用 this.state = obj
这用于使用对象初始化状态
this.state = { pageSize: 10 }
使用 this.state.*
这用于访问状态信息。(this.state.pageSize)
使用 this.setState()
这是一个接受对象或 lambda 函数的函数。用于设置状态信息
this.setState({ pageSize: 20 }) this.setState((state, props) => ({ pageSize: state.pageSize + 1 }))
让我们创建一个具有正确状态初始化的简单组件
class Welcome extends React.Component { constructor(props) { super(props); this.state = { welcomeMessage: "Hello" } } render() { return ( <div><h3>{this.state.welcomeMessage}, {this.props.name}</h3></div> ) } }
这里,this.state 用于设置欢迎消息的默认(初始)值。组件可以使用如下所示:
function App() { return ( <div className="container"> <div style={{ padding: "10px" }}> <div> <Welcome name={'John'} /> </div> </div> </div> ); }
组件将渲染欢迎消息,如下所示:
事件绑定
与 props 和 state 初始化类似,事件处理程序必须正确绑定,以便 this 将在事件处理程序中被正确访问。让我们在 Welcome 组件中创建一个新按钮来更改欢迎消息,并添加一个事件处理程序来处理按钮的 onClick 事件,如下所示:
import React from "react"; class Welcome extends React.Component { constructor(props) { super(props); this.state = { welcomeMessage: "Hello" } this.changeMessageHandler = this.changeMessageHandler.bind(this) } changeMessageHandler() { this.setState(prevState => ({ welcomeMessage: prevState.welcomeMessage == "Hello" ? "Welcome" : "Hello" })); } render() { return ( <div> <div><h3>{this.state.welcomeMessage}, {this.props.name}</h3></div> <div><button onClick={this.changeMessageHandler}>Change welcome message</button></div> </div> ) } } export default Welcome;
这里:
步骤 1 - 添加一个带有 onClick 事件的按钮
<div><button onClick={this.changeMessageHandler}>Change welcome message</button></div>
步骤 2 - 设置 this.changeMessageHandler 方法作为 onClick 事件处理程序
步骤 3 - 在构造函数中绑定事件处理程序 this.changeMessageHandler
this.changeMessageHandler = this.changeMessageHandler.bind(this)
步骤 4 - 添加事件处理程序并使用 this.setState 更新状态。
changeMessageHandler() { this.setState(prevState => ({ welcomeMessage: prevState.welcomeMessage == "Hello" ? "Welcome" : "Hello" })); }
组件可以使用如下所示:
function App() { return ( <div className="container"> <div style={{ padding: "10px" }}> <div> <Welcome name={'John'} /> </div> </div> </div> ); }
组件将渲染欢迎消息,如下所示:
总结
构造函数在基于类的 React 组件中非常重要。它的主要工作是设置组件,以便正确配置 props、state 和事件,并准备好被组件事件和渲染方法访问。