我需要每一秒都改变背景。如果我使用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);
}, []);
1条答案
按热度按时间vof42yt11#
useRef返回一个类似
{current: "value"}
的对象,因此需要如下使用。