【react】实现横向滚动加载

效果

react横向滚动加载

在这里插入图片描述

右滑实现滚动加载。滑动到最底部的时候,可以调用后端接口请求下一页的数据。

方法一

使用antd官方推荐的库react-infinite-scroll-componen

但在实现过程中,右滑到底的时候无法调用next方法。

方法二

使用onWheel和useScroll,可能获取到滚动条滑动的距离,能计算出是否滑动到最右边,但是更为细致的计算还得再深入一下。

const ref = useRef(null);
const scroll = useScroll(ref);

const onWheel = ()=>{
  console.log('scroll:', scroll)
}

<div id='srcoll' onWheel={onWheel} ref={ref}></div>
方法三
const fetchData = async (page:number)=>{
  try{
    const res = await getData(page);
    setData([...data, ...res.data]); // 关键点
  }catch(err){
    console.log(err)
  }
}

const onSrcoll = (e) => {
  e.persist();
  const { scrollWidth, scrollLeft, clientWidth } = e.target;
  if (scrollWidth - scrollLeft === clientWidth && scrollLeft && !isSrcollToRight) {
    // 关键点,滚动到最右边了
    setPage(page + 1);
    fetchData(page + 1);
  }
};

<Space
  style={{
    width: '100%',
    overflow: 'auto',
  }}
  onScroll={onSrcoll}
>
  {data.length > 0 ? (
    data.map((item: any) => {
      return (
        <Card/>
      );
    })
  ) : (
    <p>暂无回放记录</p>
  )}
</Space>

能够直接判断是否滚动到最右边 ,倒回来向左滚动的时候,也不存在判断是否还需要调用接口,省略了各种位置参数值计算的一步。参考:https://juejin.cn/post/7114195571321077768

补充:合成事件中的 stopPropagation()preventDefault()阻止事件冒泡;如果要以异步方式访问事件属性,应该对事件调用 event.persist() ,这将从池中删除合成事件,并允许用户代码保留对事件的引用。


版权声明:本文为weixin_43973415原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。