【发布时间】:2021-07-17 01:06:46
【问题描述】:
我目前正在开发一个网站,在该网站上我使用 Strapi 作为 CMS,并在前端使用 Next.js(React)。该网站还有一个图片滑块,其中显然包含图片、标题和说明。
在网站上使用一段时间后,会出现以下错误,并且滑块停止工作或执行诸如以非常快的速度依次显示所有幻灯片的操作。我该怎么做才能解决这个问题?
未处理的运行时错误 TypeError:无法读取未定义的属性“classList”
我已经尝试了很多我在 StackOverflow 上找到的解决方案,但没有任何效果......我只是无法在我的代码中找到错误,如下所示:(/components/image-slider 文件)
import ...
const Slider = ({...}) => {
if (typeof window !== 'undefined') {
var slides = document.querySelectorAll('.slide');
var btns = document.querySelectorAll('.btn-navig');
let currentSlide = 1;
// Javascript for image slider manual navigation
var manualNav = function(manual){
slides.forEach((slide) => {
slide.classList.remove('active');
btns.forEach((btn) => {
btn.classList.remove('active');
});
});
slides[manual].classList.add('active');
btns[manual].classList.add('active');
}
btns.forEach((btn, i) => {
btn.addEventListener("click", () => {
manualNav(i);
currentSlide = i;
});
});
// // Javascript for image slider autoplay navigation
var repeat = function(activeClass){
let active = document.getElementsByClassName('active');
let i = 1;
var repeater = () => {
setTimeout(function(){
[...active].forEach((activeSlide) => {
activeSlide.classList.remove('active');
});
slides[i].classList.add('active');
btns[i].classList.add('active');
i++;
if(slides.length == i){
i = 0;
}
if(i >= slides.length){
return;
}
repeater();
}, 10000);
}
repeater();
}
repeat();
}
if (error) {
return <div>An error occured: {error.message}</div>;
}
return (
<div className="img-slider">
<div className="slide active">
<div className="info">
// content
</div>
</div>
<div className="slide">
<div className="info">
// content
</div>
</div>
// further slides
<div className="navigation">
<div className="btn-navig active"></div>
<div className="btn-navig"></div>
<div className="btn-navig"></div>
</div>
</div>
);
};
// axios request ...
export default Slider;
我希望有人可以帮助我解决上述问题。非常感谢!
【问题讨论】:
-
您需要将所有 if 块移动到 useEffect 因为此代码第一次运行幻灯片和 btn 等为空/未定义
标签: javascript reactjs runtime-error next.js strapi