Хуки

useState - предназначен для того, чтобы взаимодействовать со стейтом. Параметром мы передаем начальное состояние. Хук возвращает массив, где 1 элемент это состояние, а второй функция, которая позволяет изменить это состояние.

useEffect - нужен для эмуляции жизненных циклов компонента.

Если его использовать без [], функция в нем будет вызвана сразу при загрузке страницы и при любом обновлении.

Если передать пустой [], функция внутри useEffect будет вызвана 1 раз, таким образом происходит эмуляция метода componentDidMount.

Если в массив мы отправим стейт, функция внутри useEffect будет вызвана каждый раз, как этот стейт будет изменен.

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

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

useCallback - нужен для того, чтобы мемоизировать функцию. Например, если нужно использовать одну и туже функцию для нескольких компонентов, ее можно обернуть в useCallback, тогда функция будет создаваться 1 раз, а для остальных компонентов будет использоваться мемоизированная функция.

useMemo - нужен для кэширования и оптимизации, первым параметром принимает функцию, вторым - массив зависимостей.