Реагируйте: useEffect против useMemo против useState - PullRequest
2 голосов
/ 28 мая 2019

Я пытался найти краткий ответ на этот вопрос в Интернете без удачи.

Правильно ли следующее утверждение относительно различий между useEffect, useMemo и useState?

  • Оба useState и useMemo запомнят значение при рендере.Разница в том, что:
    • useMemo не вызывает повторного рендеринга, в то время как useState делает
    • useMemo, запускается только тогда, когда его зависимости (если таковые имеются) изменились, тогда как setSomeState (второй элемент массива, возвращаемый useState) не имеет такого массива зависимостей
  • Оба useMemo и useEffect запускаются только тогда, когда их зависимостиизменить (если есть).Разница в том, что:
    • useEffect выполняется после рендеринга, в то время как useMemo выполняется до

Какие еще ключевые различия я пропустил?

1 Ответ

5 голосов
/ 28 мая 2019

Ваши очки в основном верны, некоторые незначительные уточнения:

useState вызывает повторную визуализацию при вызове метода setState (возвращается второй элемент в массиве). Он не имеет никаких зависимостей, таких как useMemo или useEffect.

useMemo пересчитывает значение только в том случае, если изменяются элементы в его массиве зависимостей (если нет зависимостей - т. Е. Массив пуст, он будет пересчитываться при каждом вызове / рендеринге). Вызов функции не вызывает повторного рендеринга. Также он запускает во время рендеринга компонента, а не раньше.

useEffect вызывается после каждого рендеринга, если элементы в его массиве зависимостей изменились (или каждый раз, когда массив опущен или пуст).

Вы всегда можете проверить https://reactjs.org/docs/hooks-reference.html,, что, на мой взгляд, довольно солидная документация

...