首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在页面上的可滚动组件中响应InfiniteScroll

在页面上的可滚动组件中响应InfiniteScroll
EN

Stack Overflow用户
提问于 2020-01-10 22:26:57
回答 1查看 11.4K关注 0票数 5

我试图在一个固定高度的div中构建一个无限滚动,并将其附加到其中,所以我的目标是窗口不要移动,而是要在其中的一个组件中无限地添加滚动和项。

到目前为止,这就是我所拥有的:

代码语言:javascript
复制
import React, { useState } from "react";
import ReactDOM from "react-dom";
import InfiniteScroll from "react-infinite-scroll-component";

const style = {
  height: 18,
  border: "1px solid green",
  margin: 6,
  padding: 8
};

const DoseListCardBody = () => {
  const [items, setItems] = useState(Array.from({ length: 20 }));

  const fetchMoreData = () => {
    setItems(items.concat(Array.from({ length: 10 })));
  };

  return (
    <div style={{ height: "100%", overflowY: "scroll" }}>
      <InfiniteScroll
        dataLength={items.length}
        next={fetchMoreData}
        hasMore={items.length < 200}
        loader={<h4>Loading...</h4>}
      >
        {items.map((i, index) => (
          <div style={style} key={index}>
            div - #{index}
          </div>
        ))}
      </InfiniteScroll>
    </div>
  );
};

ReactDOM.render(
  <div style={{ height: "35rem", background: "black" }}>
    <div style={{ height: "30rem", background: "white" }}>
      <DoseListCardBody />
    </div>
  </div>,
  document.getElementById("root")
);

如果我改变了一切都很好

代码语言:javascript
复制
ReactDOM.render(
  <div style={{ height: "35rem", background: "black" }}>
    <div style={{ height: "30rem", background: "white" }}>
      <DoseListCardBody />
    </div>
  </div>,
  document.getElementById("root")
);

代码语言:javascript
复制
ReactDOM.render(
  <DoseListCardBody />,
  document.getElementById("root")
);

我认为这是因为它使用的是窗口的滚动,而不是组件。

如何让InfiniteScroll使用父组件或具有我指定的滚动卷的组件。

我对这些不好的术语表示赞同,我通常不会开发网页。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-10 22:46:26

好了,明白了!

必须使用scrollableTarget作为InfiniteScroll中的支柱,并指定具有滚动条的compnent的ID。

示例:

代码语言:javascript
复制
const DoseListCardBody = () => {
  const [items, setItems] = useState(Array.from({ length: 20 }));

  const fetchMoreData = () => {
    setItems(items.concat(Array.from({ length: 10 })));
  };

  return (
    <div id="scrollableDiv" style={{ height: "100%", overflowY: "scroll" }}>
      <InfiniteScroll
        dataLength={items.length}
        next={fetchMoreData}
        hasMore={items.length < 200}
        loader={<h4>Loading...</h4>}
        scrollableTarget="scrollableDiv"
      >
        {items.map((i, index) => (
          <div style={style} key={index}>
            div - #{index}
          </div>
        ))}
      </InfiniteScroll>
    </div>
  );
};

注意添加‘id=“scrollableDiv’和‘scrollableTarget=’scrollableDiv‘’。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59689791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档