В первом случае редакс ничего не знает про роутер, роутер используется сам по себе. Во втором случае роутер прикручен к редаксу и логика завёрнута в мидлварю из connected-react-router. В компонентах разницы никакой. Разница в том, что второй способ позволяет работать с роутером через диспатчи специальных экшонов там, где реакта нет — например, в redux-thunk или redux-saga.
Ты — нет. В указанном компоненте есть вызов одного единственного (кастомного) хука — useRecoilValue. Кастомные хуки — это функции, вызывающие обычные хуки, например useEffect
Он работает. Он асинхронный. В документации про это написано. Если ты хочешь что-то делать с новым значением стейта, то это что-то ты должен делать в useEffect
А в тайм-ауте не меняется из-за замыкания. Это константа. Она никогда не поменяется в замыкании. Никогда.
В двух ответах выше вам написали что-то не то. В react v17 запилили новый jsx transform. И с версии 17 на самом деле просто больше не нужно импортировать React
У вас две ошибки
Первая — внутри эффекта вы добавляете обработчик и всё. Обработчик будет вызван и изменит значение только при ресайзе.
Вторая —нарушено правило useEffect про зависимости, isMobile замыкается.
Посмотрите на готовое решение, сравните со своим, почитайте статью про useEffect