Хуки
useState - предназначен для того, чтобы взаимодействовать со стейтом. Параметром мы передаем начальное состояние. Хук возвращает массив, где 1 элемент это состояние, а второй функция, которая позволяет изменить это состояние.
useEffect - нужен для эмуляции жизненных циклов компонента.
Если его использовать без [], функция в нем будет вызвана сразу при загрузке страницы и при любом обновлении.
Если передать пустой [], функция внутри useEffect будет вызвана 1 раз, таким образом происходит эмуляция метода componentDidMount.
Если в массив мы отправим стейт, функция внутри useEffect будет вызвана каждый раз, как этот стейт будет изменен.
useLayoutEffect - тоже замое что и useEffect, только он вызывается до того, как браузер перерисует экран, в отличии от useEffect, который вызывается после, он синхронный, в то время как useEffect асинхронный.
useImperativeHandle - нужен для того, чтобы родительский компонент мог пользоваться методами дочернего компонента.
useCallback - нужен для того, чтобы мемоизировать функцию. Например, если нужно использовать одну и туже функцию для нескольких компонентов, ее можно обернуть в useCallback, тогда функция будет создаваться 1 раз, а для остальных компонентов будет использоваться мемоизированная функция.
useMemo - нужен для кэширования и оптимизации, первым параметром принимает функцию, вторым - массив зависимостей.