@MarEeeeee

Как изменить Z-index с задержкой в 5сек?

Требуется поменять у данного блока z-index через определенный промежуток времени. Почему мой вариант не работает ? Как реализовать правильнее?

export default function(){
    const timerRef = useRef(null);

    const changeIndex = () => {
        const style = {zIndex:30000}
        timerRef.current = setTimeout(()=>{
            console.log(styles)
        },1000)
    }



    return(       
            <header className={styles.header + " navbar navbar-expand-lg navbar-light sticky-top " } style = {{changeIndex}}></header>
)
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ответы на вопрос 1
kleinmaximus
@kleinmaximus
Senior Full-stack Javascript Developer
import React, { useEffect, useState } from 'react';

// Функция-инициализатор нужна, чтобы вынести создание объекта состояния из компонента
const initStyle = () => ({ zIndex: 0 });

const Component = () => {
  const [style, setStyle] = useState(initStyle);

  useEffect(() => {
    // Вот здесь можно менять значения - zIndex поменяется через секунду
    const timer = setTimeout(() => setStyle({ zIndex: 1 }), 1000);

    // Надо не забыть почистить счетчик setTimeout
    return () => clearTimeout(timer);
  }, []);

  return <header className={`${styles.header} navbar navbar-expand-lg navbar-light sticky-top`} style={style} />
};


Можно сделать несколько иначе

import React, { useEffect, useMemo, useState } from 'react';

const Component = () => {
  const [zIndex, setZIndex] = useState(0);

  // Поскольку style это объект, то неплохо бы его мемоизировать
  const style = useMemo(() => ({ zIndex }), [zIndex]);

  useEffect(() => {
    const timer = setTimeout(() => setZIndex(1), 1000);

    return () => clearTimeout(timer);
  }, []);

  return <header className={`${styles.header} navbar navbar-expand-lg navbar-light sticky-top`} style={style} />
};
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
18 мая 2021, в 01:31
3000 руб./за проект
17 мая 2021, в 23:39
50000 руб./за проект
17 мая 2021, в 23:10
100000 руб./за проект