Хуки нужны, чтобы добавлять логику в функциональные компоненты: useState запоминает данные (например, значение поля ввода или список товаров), useEffect запускает код в нужный момент — при загрузке страницы, при изменении данных, при закрытии окна. Без хуков пришлось бы использовать классы, которые сейчас почти не применяются.