reactjs 下一个道具在react-infinite-scroll-component中不起作用

mrwjdhj3  于 2022-11-22  发布在  React
关注(0)|答案(1)|浏览(419)

无限滚动组件在一个表中,它在一个可滚动的页面中。我试图给页面中的每个div提供id="scrollableDiv",也给index.html中的<html>,但仍然没有用。当我删除scrollableTarget="scrollableDiv"时,fetchdata工作,直到底部的父滚动条。之后,fetchData函数不工作。当我强制滚动父滚动fetchdata工作。
但是我希望它能在滚动表时工作。而不是在滚动父级时(我指的是整个页面),任何人都可以告诉我应该在哪里分配id="scrollableDiv"。没有指定高度的div
下面是代码,
第一个

deikduxw

deikduxw1#

我也遇到过类似的问题,InfiniteScroll元素会占用整个窗口来滚动......不过,这里有一个小的修正。实际上,你只需要在InfiniteScroll元素中添加“height”,所有的问题就都解决了。这就是为什么它不会触发你的获取数据的原因。下面是一个例子:

const [fetchIsLoading, setFetchIsLoading] = useState(false);
const [contacts, setContacts] = useState([]);

    const loadMoreData = () => {

        if (fetchIsLoading) {
         return;
        }

       setFetchIsLoading(true);
       fetch('https://randomuser.me/api/?results=10&inc=name,gender,email,nat,picture&noinfo')
         .then((res) => res.json())
         .then((body) => {
           setContacts([...contacts, ...body.results]);
           setFetchIsLoading(false);
         })
         .catch(() => {
           setFetchIsLoading(false);
         });
      };

      useEffect(() => {
        loadMoreData();
      }, []);
<div  // < ------------- top level div with id 'scrollableDiv' is not even needed... but it works (if you use it or not)
      // id="scrollableDiv"
      // style={{height: 400}}
    >
      <InfiniteScroll style={{
        // height: 400      <-------- this does not work!
      }}
        dataLength={contacts.length}
        next={loadMoreData}
        hasMore={true}//contacts.length < 15
        loader={
          <Skeleton
            avatar
            paragraph={{
              rows: 1,
            }}
            active
          />
        }
        height={400} //    <--------- however, this works through the way this infinite scroll is set up.
        endMessage={<Divider plain>It is all, nothing more 🤐</Divider>}
        //scrollableTarget="scrollableDiv" <-------- this is not even needed the way this infinite scroll is set up. Even though you point it to the top level div it works either way...
      >
        <List
          dataSource={contacts}
          renderItem={(item) => (
            <List.Item key={item.email}>
              <List.Item.Meta
                avatar={<Avatar src={item.picture.large} />}
                title={<div style={{ color: '#54BEC6', cursor: 'pointer' }}>{item.name.last}</div>}
                description={item.email}
                onClick={(event) => onClickContactsTab(event, item.name.last)}
              />
              {
                // Use this section to put extra information about the user
                //<div>Extra info?</div>
              }
              
            </List.Item>
          )}
        />
      </InfiniteScroll>
    </div>

相关问题