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

use*_*er1 3 infinite-scroll reactjs

我正在尝试在具有固定高度的 div 中构建一个无限滚动,并附加一个滚动条,所以我的目标是让窗口不移动,而是让其中的组件具有滚动条,并且其中的项目可以无限添加。

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

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")
);
Run Code Online (Sandbox Code Playgroud)

如果我改变一切都会很好

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

ReactDOM.render(
  <DoseListCardBody />,
  document.getElementById("root")
);
Run Code Online (Sandbox Code Playgroud)

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

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

我对不好的术语表示歉意,我通常不开发网页。

use*_*er1 7

好的,我知道了!

必须使用scrollableTarget作为InfiniteScroll中的一个prop,并指定具有滚动条的组件的ID。

例子:

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>
  );
};

Run Code Online (Sandbox Code Playgroud)

请注意添加了 'id="scrollableDiv"' 和 'scrollableTarget="scrollableDiv"'。