- 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 - Map
- 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 - PureComponent 类
众所周知,React 是一个非常流行的用于创建交互式用户界面的 JS 库。它完全基于组件。因此,React 中存在一种称为 PureComponent 的组件类型。它与 Component 非常相似,但是它避免了对于相同的 props 和 state 的重新渲染。
语法
class MyComponent extends PureComponent { render() { return <h1>Hiii, {this.props.name}!</h1>; } }
我们可以在上面的代码示例中看到。我们扩展了 PureComponent 来代替 Component。我们通常扩展 Components。因此,为了避免为相同的 props 和 state 重新渲染类组件,我们可以扩展 PureComponent。
React 中的 PureComponent 只是常规 Component 的增强版。它能够执行 Component 的所有功能。PureComponent 的主要优点是它会在重新渲染之前检查以验证 props 和 state 是否已更改。
PureComponent 类似于自定义的“shouldComponentUpdate”方法。“shouldComponentUpdate”方法的作用是确定是否应该更新组件。但是 PureComponent 自动执行此检查,只关注数据的更改,这可以帮助我们的应用程序更有效地运行。
如何使用它?
当组件的父组件在 React 中发生变化时,子组件通常会更新或重新渲染。即使传输到子组件的新数据与旧数据相同,也会发生这种情况。
但是,React 提供了一种优化来避免低效的重新渲染。我们可以创建一个组件,只要它接收到的新 props 和 state 等于我们拥有的旧数据,它就不会在父组件更改时重新渲染。
如果我们在 React 中使用类组件,我们可以通过使我们的组件扩展名为“PureComponent”的类来启用此优化。这告诉 React 只有当它接收到的数据实际发生更改时才重新渲染组件。
示例
示例 - 计数器应用
在此,我们将使用 PureComponent 创建一个简单的计数器应用程序来演示它如何优化渲染:
因此,我们将有一个扩展 PureComponent 的 Counter 组件。
我们将在 MyApp 组件中显示当前计数值。
每次我们点击“递增”按钮时,计数器都会递增,并且计数器组件只有在 count prop 发生更改后才会更新。
此代码解释了 PureComponent 如何检查 prop 值在重新渲染之前是否已更改,以便优化渲染。
import React, { PureComponent, useState } from 'react'; class Counter extends PureComponent { render() { console.log("Counter was rendered at", new Date().toLocaleTimeString()); return <div>Count: {this.props.count}</div>; } } export default function MyApp() { const [count, setCount] = useState(0); const increment = () => { setCount(count + 1); }; return ( <> <button onClick={increment}>Increment</button> <Counter count={count} /> </> ); }
输出
示例 - 列表组件
让我们使用 PureComponent 创建另一个 React 应用。在这个示例中,我们将有一个 ListComponent,它使用 PureComponent 渲染项目列表。我们有一个 ListComponent,它在其状态中维护一个水果列表。该组件渲染一系列 ListItem 组件,每个组件显示一个水果。我们已为 ListItem 组件使用 PureComponent 来利用其自动检查 prop 更改的功能。
import React, { PureComponent } from 'react'; class ListItem extends PureComponent { render() { return <li> {this.props.value}</li>; } } class ListComponent extends PureComponent { constructor(props) { super(props); this.state = { items: ['Apple', 'Banana', 'Orange'], }; } render() { return ( <div> <h2>Fruit List:</h2> <ul> { this.state.items.map((item, index) => ( <ListItem key={index} value={item} /> )) } </ul> </div> ); } } export default ListComponent;
输出
此示例显示了在处理项目列表或数组时 PureComponent 如何有用,因为它有助于避免在数据保持不变时不必要的重新渲染。
示例 - 使用 PureComponent
此 React 应用包含两个组件:ParentComponent 和 ChildComponent。此应用程序的主要目标是展示 PureComponent 在优化 React 应用程序中的渲染方面的用途。
import React, { PureComponent } from 'react'; class ChildComponent extends PureComponent { render() { return <h1>Hello, {this.props.name}!</h1>; } } class ParentComponent extends PureComponent { constructor(props) { super(props); this.state = { name: 'John', }; } render() { return <ChildComponent name={this.state.name} />; } } export default ParentComponent;
输出
总结
PureComponent 是一个改进我们应用程序的 React 工具。它确保我们的程序中的组件仅在必要时更新。这可以帮助我们的软件更有效地运行并更快地响应用户输入。