ReactJS - PureComponent 类
众所周知,React 是一个非常流行的 JS 库,用于创建交互式用户界面。它完全基于组件。因此,React 中存在一种称为 PureComponent 的组件。它与 Component 非常相似,但它避免了对相同 props 和状态进行重新渲染。
语法
class MyComponent extends PureComponent {
render() {
return <h1>Hiii, {this.props.name}!</h1>;
}
}
我们可以在上面的代码示例中看到。我们扩展了 PureComponent 来代替 Component。我们通常会扩展 Components。因此,为了避免为相同的 props 和 state 重新渲染类组件,我们可以扩展 PureComponent。
React 中的 PureComponent 只是常规 Component 的增强版本。它能够执行 Component 的所有功能。PureComponents 的主要优点是它在重新渲染之前会检查 props 和 state 是否已更改。
PureComponent 类似于自定义的"shouldComponentUpdate"方法。shouldComponentUpdate 方法的作用是确定是否应更新组件。但 PureComponent 会自动执行此检查,仅关注数据的变化,这可以帮助我们的应用程序更有效地运行。
如何使用它?
当 React 中组件的父组件发生变化时,子组件通常会更新或重新渲染。即使传输给子组件的新数据与旧数据相同,也会发生这种情况。
但是,React 提供了一种优化来避免低效的重新渲染。我们可以创建一个组件,当其父组件更改时,只要它接收的新 props 和状态等于我们拥有的旧数据,它就不会重新渲染。
如果我们在 React 中使用类组件,我们可以通过让我们的组件扩展一个名为"PureComponent"的类来启用此优化。这会告诉 React 仅在其接收的数据实际发生变化时才重新渲染组件。
示例
示例 −计数器应用
在此,我们将使用 PureComponent 创建一个简单的计数器应用,以展示它如何优化渲染 −
因此,我们将有一个扩展 PureComponent 的 Counter 组件。
我们将在 MyApp 组件中显示当前计数值。
每次我们点击"增加"按钮时,计数器都会增加,并且计数器组件在计数 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 应用。在此示例中,我们将有一个使用 PureComponent 呈现项目列表的 ListComponent。我们有一个 ListComponent,它在其状态下维护水果列表。该组件呈现 ListItem 组件列表,每个组件都显示一种水果。我们已将 PureComponent 用于 ListItem 组件,以利用其自动检查 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 在处理列表或项目数组时如何有用,因为它有助于在数据保持不变时避免不必要的重新渲染。
使用 Pure Component 的示例 −
此 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 工具。它确保我们程序的组件仅在必要时更新。这可以帮助我们的软件更有效地运行并更快地响应用户输入。

reactjs_reference_api.html