我尝试从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;
3条答案
按热度按时间xzv2uavs1#
react.createRef()是异步的,所以如果你试图在
useEffect
中访问它,它将返回null
。这意味着当你在useEffect
中调用scrollRef.current
时,你还没有给它分配任何真实的示例。xzv2uavs2#
从我的Angular 来看,你需要添加一个条件,因为这个问题与异步有关。在useEffect中,你使用scrollReff时,这个变量不存在。为什么?因为在渲染中,你在条件化文档是否存在。如果你了解useEffect的工作原理,你就知道第一个渲染useEffect没有找到这个变量。
58wvjzkj3#
我遇到了同样的问题,然后意识到我忘了在
<LocomotiveScrollProvider>
内部添加<main data-scroll-container ref={containerRef}>
。像这样;