未捕获的类型错误:无法读取 null 的属性(读取“offsetTop”)
2022-10-04
950
我尝试创建滚动效果。当您点击导航栏上的选项时,我们会转到特定部分。
为什么我会收到此错误?
这是出现错误的代码:
import React, { useRef } from 'react'
export default function Home() {
const about = useRef(null);
const work = useRef(null);
const contact = useRef(null);
const scrollSection = (elementRef) => {
window.scrollTo({
top: elementRef.current.offsetTop,
behavior: "smooth",
});
};
return (
<>
<div ref={about} className='first'>
<nav className="navbar">
<div className="logo">
<video loop autoPlay muted playsInline className='logo_video' >
<source src={video} type="video/mp4" />
</video>
</div>
<div className="about_section">
<ul className="list">
<li className="info about">
<div className="infoindex" onClick={() => scrollSection(about)}>
About
</div>
</li>
<li className="info">
<div className="infoindex" onClick={scrollSection(work)}>
Work
</div>
</li>
<li className="info">
<div className="infoindex" onClick={scrollSection(contact)}>
Contact
</div>
</li>
</ul>
</div>
</nav>
我可以对此代码进行哪些编辑?
2个回答
查看以下代码行:
<div className="infoindex" onClick={() => scrollSection(about)}>
<div className="infoindex" onClick={scrollSection(work)}>
<div className="infoindex" onClick={scrollSection(contact)}>
现在您可以看到区别。 scrollSection(work) 和 scrollSection(contact) 在每个渲染中都会触发 scrollSection 函数,即使您不单击它们也是如此。不要忘记向它们添加箭头函数。
<div className="infoindex" onClick={() => scrollSection(about)}>
<div className="infoindex" onClick={() => scrollSection(work)}>
<div className="infoindex" onClick={() => scrollSection(contact)}>
顺便说一句,您只处理 div 父级的 about 引用:
<div ref={about} className='first'>
您还需要处理其余的引用,不要忘记 onClick 事件。如果您的 about div 包裹了其余的 div ,那么如果您想单击父 div 内的子 div ,它可能会出现不必要的行为。
Jesus Angel Rodriguez Martinez
2022-10-04
-
您没有像传递
about
引用那样将work
和contact
引用传递给元素。它们从未被设置,这就是您获得 null current 的原因。 -
您不应直接在
onClick
中调用scrollSection
,而是传递一个在单击div
时执行的回调函数:<div className="infoindex" onClick={() => scrollSection(work)>Work</div>
和
<div className="infoindex" onClick={() => scrollSection(contact)}>联系方式</div>
Ismail El Shinnawy
2022-10-04