javascript 类型错误:使用机车滚动React模块时,无法读取属性“offsetHeight”为空

czq61nw1  于 2023-01-08  发布在  Java
关注(0)|答案(3)|浏览(164)

我尝试从firebase加载一些图像,并使用滚动响应模块水平滚动。然而,每当我添加下面的useEffect部分来初始化滚动时,我得到以下错误:

我已经按照LocomotiveScroll网站和GitHub页面上的所有说明去做了,也看了其他的例子,但似乎还是搞不懂,甚至可能我错过了什么。

import React, { useEffect } from "react";
import useFirestore from "../../Hooks/useFirestore";
import "./Astro.css";
import LocomotiveScroll from "locomotive-scroll";

//<a class="gallery__item-link">explore</a>

const Astro = (props) => {
  const { docs } = useFirestore("astro");
  let i = 1;

  const scrollReff = React.createRef();

  useEffect(() => {
    const scroll = new LocomotiveScroll({
      el: scrollReff.current,
      smooth: true,
      direction: "horizontal"
    });
  });

  return (
    <div>
      {docs &&
        docs.map((doc) => (
          <div key={doc.id}>
            <div ref={scrollReff}>
              <div className="content">
                <div className="gallery">
                  <figure className="gallery__item">
                    <div className="gallery__item-img">
                      <div class="gallery__item-img">
                        <div
                          class="gallery__item-imginner"
                        >
                          <img src={doc.url} alt={doc.description} />
                        </div>
                      </div>
                    </div>
                    <figcaption className="gallery__item-caption">
                      <h2
                        className="gallery__item-title"
                        data-scroll
                        data-scroll-speed="1"
                      >
                        {doc.title}
                      </h2>
                      <span className="gallery__item-number">{"0" + i++}</span>
                    </figcaption>
                  </figure>
                </div>
              </div>
            </div>
          </div>
        ))}
    </div>
  );
};

export default Astro;
xzv2uavs

xzv2uavs1#

react.createRef()是异步的,所以如果你试图在useEffect中访问它,它将返回null。这意味着当你在useEffect中调用scrollRef.current时,你还没有给它分配任何真实的示例。

xzv2uavs

xzv2uavs2#

从我的Angular 来看,你需要添加一个条件,因为这个问题与异步有关。在useEffect中,你使用scrollReff时,这个变量不存在。为什么?因为在渲染中,你在条件化文档是否存在。如果你了解useEffect的工作原理,你就知道第一个渲染useEffect没有找到这个变量。

const Astro = (props) => {
  ...

  useEffect(() => {
    if(!docs) return;
    const scroll = new LocomotiveScroll({
      ...
    });
  });
58wvjzkj

58wvjzkj3#

我遇到了同样的问题,然后意识到我忘了在<LocomotiveScrollProvider>内部添加<main data-scroll-container ref={containerRef}>
像这样;

<LocomotiveScrollProvider
      options={{smooth: true,}}
      watch={[]}
      containerRef={containerRef}
 >
      <main data-scroll-container ref={containerRef}>
          <Component {...pageProps} />
      </main>
</LocomotiveScrollProvider>

相关问题