Как использовать встроенную функцию сравнения React.memo в React? - PullRequest
0 голосов
/ 13 июля 2020

Я хочу проверить, изменилось ли определенное свойство вручную, а затем использовать встроенную функцию сравнения React для других свойств. Например:

React.memo(
  () => <div />,
  (prevProps, nextProps) => {
    if (!nextProps.visible) {
      return true;
    }
    return React.shallowCompare(prevProps, nextProps);
  },
);

Я могу легко написать свою собственную функцию сравнения или скопировать / вставить из источника React, но если React изменит свою функцию сравнения по умолчанию, мне также придется вручную изменить свою функцию. Есть ли способ использовать встроенную функцию сравнения React для React.memo?

Кроме того, AFAIK, react-addons-shallow-compare устарел.

1 Ответ

1 голос
/ 13 июля 2020

К сожалению, нет. По умолчанию React имеет значение shallowEqual, если вы не предоставляете функцию сравнения, но нет дополнительных logi c для использования поведения по умолчанию, если вы возвращаете что-то особенное (например, return null).

Использование React :

const prevProps = currentChild.memoizedProps;
// Default to shallow comparison
let compare = Component.compare;
compare = compare !== null ? compare : shallowEqual;
if (compare(prevProps, nextProps) && current.ref === workInProgress.ref) {
...

React в настоящее время не экспортирует shallowEqual. Однако в документации React указано, что сравнение выполняется только поверхностно, что вряд ли сильно изменится и может быть тривиально реализовано, как вы знаете ( пример ). Я предполагаю, что это решение - уменьшить API, который их команда предоставляет разработчикам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...