reactjs 每秒背景变化

uxhixvfz  于 2022-12-22  发布在  React
关注(0)|答案(1)|浏览(100)

我需要每一秒都改变背景。如果我使用setinterval。背景变化太快。
下面是我代码:

const { url, id, isButtonPrev, isButtonNext } = useOwnSelector(state => state.sliderReducer);
    const img = useRef<HTMLImageElement>(null);
    const dispatch = useOwnDispatch();

下面是改变背景的函数

const setBackGround = (index: number | null = null) => {
    console.log(index)
    if(img.current) {
        img.current.src = `${url}${id < 10 ? `0${id}` : `${id}`}.jpg`;

        img.current.onload = () => {
            document.body.style.backgroundImage = `url(${img.current?.src})`;
            if (index) dispatch(setId(index));
            dispatch(isButton(''));
        }
    }
    }

那么我调用这个函数

setBackGround();
    setInterval(() => {
       setBackGround(id + 1);
    }, 1000);

但背景变化很快
我也试过用useEffect钩子,但也没用

useEffect( () => {
     const intervalID = setInterval(() => {
         setBackGround(id + 1);
     }, 1000);
     return clearInterval(intervalID);
   }, []);
vof42yt1

vof42yt11#

useRef返回一个类似{current: "value"}的对象,因此需要如下使用。

const imgRef = useRef<HTMLImageElement>(null);

if(imgRef.current){
  imgRef.current.src = url;
}

相关问题