[英]react-intersection-observer only works with the last elements
我正在嘗試使用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 鏈接以將useInView
移動到Post.js
並刪除了 Context API。現在可以使用了!
首先,您使用的是上下文,它維護一個 state 但在您的情況下,您希望單獨跟蹤所有帖子項目,因此,
只需將useInView鈎子放入 Post.js 的每個組件中,並將其從 App.js 中刪除
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.