Как установить начальное значение анимированного присутствия движения фреймера на значение false в мобильном представлении в React с помощью крючков

#reactjs #animation #react-hooks #web-deployment #framer-motion

Вопрос:

Я хочу, чтобы начальное значение опоры присутствия анимации в движении фрейма было равно false на мобильном устройстве, чтобы анимация не происходила. Я попытался создать состояние, используя useState, подобное этому, и установить его в useEffect.

 const [isMobile, setIsMobile] = useState(false);
useEffect(() => {
    if (window.innerWidth < 700) {
        setIsMobile(true);
    }
}, []);



<AnimatePresence initial={isMobile ? false : true}>
  <Switch location={location} key={location.key}>
        <Route exact path='/' component={Home} />
        <Route exact path='/projects/:projectId'component={ProjectPage}/>
        <Route exact path='/more/:optionId' component={Options} />
  </Switch>
 

Но проблема здесь в том, что эффект использования вызывается после рендеринга элементов. И, таким образом, анимация уже произошла. Есть ли способ решить эту проблему? Кроме того, я хочу удалить некоторые анимации на мобильных устройствах, потому что они не работают гладко на мобильных устройствах, и через некоторое время мобильный chrome продолжает сбоить. Он плавно работает на рабочем столе. Пожалуйста, помогите. Спасибо.

Ответ №1:

Вы пытались инициировать свое состояние с помощью этого:

 const [isMobile, setIsMobile] = useState(() => window.innerWidth < 700);
 

Лучшим способом было бы использовать медиа-запросы, что-то в этом роде https://github.com/contra/react-responsive

 const isMobile = useMediaQuery({ query: '(max-width: 720px)' })