Имеет ли смысл 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 станет полезным.

реагировать useCallbackuseCallback

Я так не думаю. Это пример на сайте 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приходят со своими накладными расходами. Проверьте это , Кент С. Доддс рассказывает об этом более подробно.

Подумайте об этом таким образом:

Когда вы прокручиваете веб-страницу, происходит множество повторных отрисовок. Даже во время некоторых анимаций происходит много повторных рендеров, но мы не сталкиваемся с проблемами производительности из-за скорости браузера.

Чтобы охватить крайние случаи, я также предлагаю вам прочитать об изменением макета и обработчиках ввода сустранении ошибок.

Другие вопросы по тегам