#reactjs #next.js
Вопрос:
В настоящее время я использую «реагирующую реакцию» для включения или выключения некоторых компонентов в зависимости от того, просматривается ли приложение на рабочем столе или мобильном устройстве.
Упрощенный пример:
import { useMediaQuery } from 'react-responsive'
export default function MyComponent(props) {
const isMobile = useMediaQuery({ query: `(max-width: 480px)` })
return (
<Wrapper>
{ isMobile ? <ComponentMobile /> : <ComponentDesktop /> }
</Wrapper>
)
}
Когда я перемещаюсь со страницы на страницу в приложении, это работает идеально, но когда я открываю веб-сайт в первый раз, все компоненты неверны (все еще отображают ComponentDesktop), даже если я нахожусь на мобильном телефоне.
Я предполагаю, что компонент отображается на сервере, и когда дело доходит до интерфейса, он не обновляется.
Каков правильный метод для этого?
Большое спасибо!
Ответ №1:
Недавно столкнулся с аналогичной проблемой, в итоге показал или скрыл компоненты с помощью CSS. В пользовательском интерфейсе Material есть скрытый компонент, который позволяет вам легко делать это с помощью CSS, но, безусловно, есть и другие решения.
Смотрите это видео от Vercel для нескольких возможных реализаций: https://www.youtube.com/watch?v=K7g8X_VRDy8
Проверка пользовательского агента также возможна, но лично мне нравится идея CSS просто потому, что она автоматически отображает или скрывает компоненты в зависимости от ширины экрана, но она, безусловно, не идеальна.