Мемоизация в React предотвращает ненужные перерисовки, кэшируя результаты компонентов. Когда props не изменились, мемоизированный компонент пропускает перерисовку и возвращает закэшированный результат.
Начиная с React v16.6.0, встроенный React.memo — это стандартное решение. Он оборачивает функциональный компонент и перерисовывает его только при изменении props.
Базовая реализация:
const MemoComponent = React.memo(function MemoComponent(props) {
/* рендер с использованием props */
});
Или с экспортом:
export default React.memo(MyFunctionComponent);
React.memo выполняет поверхностное сравнение propsДля сложных сравнений props ты можешь передать кастомную функцию сравнения:
React.memo(MyComponent, (prevProps, nextProps) => {
// верни true если props равны (пропустить перерисовку)
// верни false если props отличаются (перерисовать)
})
До появления React.memo библиотеки вроде moize предоставляли мемоизацию:
import moize from 'moize'
import Component from './components/Component'
const MemoizedFoo = moize.react(Component)
Однако React.memo теперь рекомендуемый стандарт и должен быть твоим первым выбором для современных React приложений.
React.memo выполняет глубокое сравнение всех вложенных свойств в объектах props для определения необходимости повторного рендера.
Новый — ещё не проверен сообществом
Вы