Загрузка...
Загрузка...
Продолжая работу с платформой, вы принимаете условия Политики конфиденциальности и использование файлов cookie.
PureComponent — это специальный тип классового компонента в React, который автоматически реализует метод shouldComponentUpdate() с поверхностным сравнением props и state.
Если входные данные (props или state) не изменились, компонент не перерисовывается.
import React, { PureComponent } from 'react';
class MyComponent extends PureComponent {
render() {
console.log('Рендер!');
return <div>{this.props.name}</div>;
}
}
Внутри PureComponent уже реализован метод:
shouldComponentUpdate(nextProps, nextState) {
return shallowCompare(this.props, nextProps) || shallowCompare(this.state, nextState);
}
| Компонент | Поведение |
|---|---|
React.Component | Всегда перерисовывается при изменении props или state |
React.PureComponent | Сравнивает props и state, и может избежать лишнего рендера |
class Counter extends React.PureComponent {
render() {
console.log("Рендер Counter");
return <div>{this.props.value}</div>;
}
}
export default function App() {
const [count, setCount] = useState(0);
return (
<>
<Counter value={count} />
<button onClick={() => setCount(0)}>Обновить</button>
</>
);
}
Если нажать на кнопку, значение count не изменится — и PureComponent не перерендерится.
PureComponent не работает с вложенными объектами или массивами (если вы мутировали их)spread, map, filter, slice) для корректного сравненияОграничение:
PureComponent делает только поверхностное сравнение. Если вы измените внутренности объекта без изменения ссылки — React этого не заметит.
props и state без побочных эффектовReact.memo)const MyComponent = React.memo((props) => {
return <div>{props.value}</div>;
});
PureComponent помогает избежать лишних перерисовок в классовых компонентахprops и state по ссылке