- 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 APP中引入事件
- ReactJS - 状态管理
- ReactJS - 状态管理 API
- ReactJS - 无状态组件
- ReactJS - 使用 React Hooks 进行状态管理
- ReactJS - 使用 React 钩子的组件生命周期
- ReactJS - 组件的布局
- ReactJS - 分页
- ReactJS - Material 用户界面
- ReactJS - Http 客户端编程
- ReactJS - 表单编程
- ReactJS - 受控组件
- ReactJS - 不受控制的组件
- ReactJS - Formik
- ReactJS - 条件渲染
- ReactJS - 列表
- ReactJS - 键
- ReactJS - 路由
- ReactJS - 冗余
- ReactJS - 动画
- ReactJS - 引导程序
- ReactJS - 地图
- ReactJS - 表格
- ReactJS - 使用 Flux 管理状态
- ReactJS - 测试
- ReactJS - CLI 命令
- ReactJS - 构建和部署
- ReactJS - 示例
- ReactJS - 钩子简介
- ReactJS - 使用 useState
- ReactJS - 使用 useEffect
- ReactJS - 使用 useContext
- ReactJS - 使用 useRef
- ReactJS - 使用 useReducer
- ReactJS - 使用 useCallback
- ReactJS - 使用 useMemo
- ReactJS - 自定义钩子
- ReactJS - 可访问性
- ReactJS - 代码拆分
- ReactJS - 上下文
- ReactJS - 错误边界
- ReactJS - 转发引用
- ReactJS - 片段
- ReactJS - 高阶组件
- ReactJS - 与其他库集成
- ReactJS - 优化性能
- ReactJS - 分析器 API
- ReactJS - 门户
- ReactJS - 没有 ES6 ECMAScript 的 React
- ReactJS - 没有 JSX 的 React
- ReactJS - 协调
- ReactJS - 引用和 DOM
- ReactJS - 渲染属性
- ReactJS - 静态类型检查
- ReactJS - 严格模式
- ReactJS - Web 组件
- ReactJS - 日期选择器
- ReactJS - Helmet
- ReactJS - 内联样式
- ReactJS - 属性类型
- ReactJS - 浏览器路由器
- ReactJS - DOM
- ReactJS - 旋转木马
- ReactJS - 图标
- ReactJS - 表单组件
- ReactJS - 参考 API
ReactJS - 构造函数
通常,类中的构造函数方法用于设置新创建的对象的初始值。React 还使用 constructor() 来实现相同的初始化目的。然而,在 react 中,构造函数也用于状态初始化和事件绑定目的。
在本章中,让我们学习如何在 react 组件中使用构造函数。
props 的初始化
正如我们所知,每个 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
这用于使用 object 初始化状态
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 和状态初始化类似,必须正确绑定事件处理程序,以便在事件处理程序中正确访问 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 组件中非常重要。它的主要工作是以这样一种方式设置组件,即正确配置属性、状态和事件,并准备好由组件事件和渲染方法访问。