类型错误:无法读取 null 的属性“getBoundingClientRect”

IT技术 reactjs
2021-05-18 07:49:59

我正在尝试创建具有粘性效果的标题,但是在滚动页面时出现此错误,有时它可以工作,有时会发生错误。谁能帮我解决这个问题?

在此处输入图片说明

  const EventPage: React.FC = () => {
    const [isSticky, setSticky] = useState(false);
    const ref = useRef(null);

    const handleScroll = () => {
      if (ref.current.getBoundingClientRect().y <= -580 || null) {
        console.log(ref.current.getBoundingClientRect().y);

        setSticky(true);
      } else {
        setSticky(false);
      }
    };

    useEffect(() => {
      window.addEventListener("scroll", handleScroll);

      return () => {
        window.removeEventListener("scroll", () => handleScroll);
      };
    }, []);

    return (
      <div>
        <Head>
          <title>Event Page</title>
        </Head>
        <Header />
        <div className={`sticky-wrapper${isSticky ? " sticky" : ""}`} ref={ref}>
          {isSticky && <Sticky />}
        </div>
2个回答

refs 在重新渲染时可以为 null,因此在访问元素 refs 的属性之前始终检查 null。以下是gaearon对裁判的看法。

const handleScroll = () => {
      if(!ref.current) return
      if (ref.current.getBoundingClientRect().y <= -580 || null) {
        console.log(ref.current.getBoundingClientRect().y);

        setSticky(true);
      } else {
        setSticky(false);
      }
    };

抱歉写晚了。

if(status: solved)
{
  **CONGRATULATIONS**
}

else{

好吧,我想问题不在您的 JS 文件中,也许在您的 .html 文件中。去那里,要么在你链接你的 JS 文件的地方使用 defer,要么把它放在你的目标元素下。那可能有用,至少对我有用! }