react-intersection-observer 仅适用于最后一个元素

你你

我正在尝试使用 构建延迟加载功能react-intersection-observer,目标是仅加载框中的图像(如果它们在视口中)。

  • 目前,当我滚动到最后一个元素时 - 它会渲染出盒子的所有图像。
  • 但是当我向上滚动并且最后一个框超出视口时,顶部的所有内容都会消失。
  • 如果我打印出来inView,这会true在滚动到最后一个元素时转向,并false在最后一个元素离开视口时转向。

如何解决此问题,使其仅渲染出视口中的框?


演示图:

在此处输入图像描述


我的代码:

应用程序.js

export const AppContext = createContext();

function App() {
  const { ref, inView, entry } = useInView({
    rootMargin: "50px 0px",
    initialInView: true
    // triggerOnce: true,
  });

  return (
    <AppContext.Provider value={{ ref, inView, entry }}>
      <div className="App">
        <Posts />
      </div>
    </AppContext.Provider>
  );
}

export default App;

Post.js

import { useContext } from 'react'
import { AppContext } from '../App'

function Post({ post }) {
  const { ref, inView } = useContext(AppContext)
  return (
    <div className="post" ref={ref}>
      {inView ? 
        <img src={post.imgUrl} alt={post.title} className="post__img" loading="lazy" />
        : <div className="post__img" />
      }
      <h1 className="post__title">{post.title}</h1>
    </div>
  )
}

export default Post

更新:

我更新了下面的 Codesandbox 链接以移至useInViewPost.js删除 Context API。现在可以了!

使用 react-intersection-observer 编辑延迟加载

奥萨马·马利克

首先,您正在使用上下文,它保持单一状态,但在您的情况下,您希望分别跟踪所有帖子项目,

只需在 Post.js 的每个组件中引入useInView钩子,然后将其从 App.js 中删除

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MutationObserver仅适用于最后一个突变

Intersection Observer API触发回调,即使元素不在视图中

无法使用Intersection Observer API

使用Intersection Observer API延迟翻译元素

Appendchild仅适用于最后一个元素

Intersection Observer API和Bootstrap出现问题

将Google Maps google-maps-react npm包与react-intersection-observer一起使用以增加灯塔得分

为什么Intersection Observer在第一个元素相交时向所有观察到的元素添加类?

Intersection Observer API不适用于隐藏元素

使用Intersection Observer切换活动类

针对不同窗口大小的Intersection Observer微调

Windows上是否有一个适用于React Native的良好IDE?

我的 css ::after 仅适用于最后一个元素

this.props 适用于一个 func 而不适用于另一个 React-Redux

如何使用intersection-observer延迟加载html div标签?

使用 react-intersection-observer 开玩笑测试反应组件

我怎样才能让我的 Intersection Observer 只将 div 放在屏幕上一次而不是在用户滚动时将其删除?

根据使用 Intersection Observer 滚动到视图中的元素的数据属性更改导航栏的主题

Intersection Observer 不能只增加 top rootMargin

Intersection Observer API 是滚动动画的唯一方法吗?

我在使用 Intersection Observer API 时遇到问题

是否可以在每个滚动/像素触发 Intersection Observer 回调?

如果我刷新页面,react-intersection-observer 总是在开始时返回 true

Intersection Observer API 进入无限渲染循环

Airflow 动态任务依赖设置仅适用于列表中的最后一个元素

当元素在 Intersection Observer API 中的视口外时,无法清除间隔

why does intersection observer keeps on running?

使用 Intersection Observer 製作動畫

使用 Intersection Observer API 时 CSS 动画滞后或跳动