React.memo и withRouter
Я хочу не перерисовывать свой компонент на определенных путях, пытаясь сделать это с помощью React.memo и проверяя текущий путь с помощью withRouter HOC.
Функция сравнения в React.memo не вызывается.
function compare(prevProps, nextProps) {
console.log(prevProps,nextProps)
return (prevProps.location.pathname !== '/' && nextProps.location.pathname !== '/')
}
export default React.memo( withRouter(MyComponent), compare);
2 ответа
Просто используйте это так
функция compare(prevProps, nextProps) { console.log(prevProps,nextProps) return (prevProps.location.pathname!== '/' && nextProps.location.pathname!== '/') } экспорт по умолчанию withRouter(React.memo(MyComponent, сравните));
Спасибо за ваш вопрос, он был очень полезен для меня два месяца назад.
функция принимает компонент и , который будет вызываться, чтобы решить, нужно ли React повторно отображать или нет, если функция возвращает
true
компонент не будет повторно отображаться, в любом случае, если функция вернет
false
тогда реквизит теперь другой, и React делает
re-render
к вашему компоненту.
Теперь: чтобы получить доступ к
pathname
правильно в переданном to then следует обернуть, а не наоборот, обернуть компонент (он не знает, запомнена ли его версия компонента или нет, он просто обертывает его) и передать ему реквизиты маршрутизации.
The
function
передается в качестве второго аргумента, теперь может получить доступ к
previous
а также
new
props и выполните сравнение, как мы говорили ранее (где каждый props содержит полные детали маршрутизации, которые вы хотите).
import { memo } from 'react';
function propsAreEqualBasedOnPathname(prevProps, nextProps) {
return prevProps.location.pathname == nextProps.location.pathname;
}
withRouter(memo(MyComponent), propsAreEqualBasedOnPathname);
Наконец, обратите особое внимание на то, как сравнение выполняется внутри
compare function
потому что некоторые ошибки могут навсегда помешать повторному рендерингу вашего компонента в будущем.
я нашел с помощью
memo
с
withRouter
действительно важно улучшить
performance
компонентов React, особенно если компонент представляет собой страницу, полную деталей и логики выборки, которая может потребовать некоторого времени для рендеринга, поэтому каждый сохраненный вами повторный рендеринг увеличивает производительность вашей страницы .