Документация определяет usePrevious без массива зависимостей, почему? - PullRequest
0 голосов
/ 11 марта 2020

Это копия-вставка из: Часто задаваемые вопросы о хуках usePrevious

function usePrevious(value) {
  const ref = useRef();
  useEffect(() => {
    ref.current = value;
  });  // no dependency arg, why?
  return ref.current;
}

Поскольку useEffect вызывается без массива зависимостей, его аргумент функции будет вызываться для каждого визуализации. Безопасно ли ограничивать это только при изменении value путем добавления value в массив зависимостей useEffect, например:

  useEffect(() => {
    ref.current = value;
  }, [value]);

Мне интересно, существует ли какой-либо сценарий, где ref.current должен обновлять каждый рендер, что объясняет пропуск [value] из документации.

1 Ответ

1 голос
/ 11 марта 2020

В этом примере «каждый рендер» в основном означает всякий раз, когда переменная value все равно изменяется, поскольку существует только один хук useState. Поэтому добавление value в массив deps в этом случае не имеет значения. Пропуск этого также не имеет значения, поскольку он никогда не запускается с такими же значениями (только после изменения на count в родительской функции).

Если где-то был еще один useState, который вызывал другой повторный рендеринг, тогда добавление value в массив deps приведет к сокращению ref.current обновлений.

...