Имеет ли смысл useCallback для незарегистрированных компонентов?
Во время согласования react сравнивает деревья и получает различия. Имеет ли смысл уменьшать эти различия с помощью перехватчиков мемоизации, когда компоненты не запоминаются?
Пример:
// Does useCallback make sense here?
const onPress = useCallback(() => console.log('Press!'), []);
return (
<Pressable onPress={onPress}/> // Pressable is neither a memoized FC nor a PureComponent
)
3 ответа
Так что у React автоматически есть система memoize, которая проверяет различия всех свойств компонентов при рендеринге, независимо от того, какой компонент запоминается. С помощью этой системы реагирование проверяет только примитивные типы (Number, String, Boolean и т. Д.).
Но если вы передаете функцию в качестве реквизита и хотите отреагировать на запоминание этих вызовов функций, тогда useCallback станет полезным.
Я так не думаю. Это пример на сайте React.org.
const memoizedCallback = useCallback(
() => {
doSomething(a, b);
},
[a, b],
);
Здесь [a, b] - список зависимостей. Это означает, что обратный вызов вызывается автоматически при изменении a или b. Вроде бы не назывался, как ваш. Вы не передали никаких зависимостей, и обратный вызов не будет вызываться. Я думаю, вы можете изменить это, если хотите использовать обратный вызов.
const [pressed, setPressed] = useState(false)
useCallback(() => console.log('Press'), [pressed])
return (
<Pressable onPress={() => setPressed (pressed => !pressed) } />
)
Нет. В общем, React работает слишком быстро. и должны использоваться только при необходимости.
Примечание: « Преждевременная оптимизация - корень всех зол » исх.
useCallback
а также
useMemo
приходят со своими накладными расходами. Проверьте это , Кент С. Доддс рассказывает об этом более подробно.
Подумайте об этом таким образом:
Когда вы прокручиваете веб-страницу, происходит множество повторных отрисовок. Даже во время некоторых анимаций происходит много повторных рендеров, но мы не сталкиваемся с проблемами производительности из-за скорости браузера.
Чтобы охватить крайние случаи, я также предлагаю вам прочитать об изменением макета и обработчиках ввода сустранении ошибок.