select滑动分页请求数据

需求背景

Antd 的 select 组件支滑动分页获取后端数据

实现滑动加载数据

定义变量
复制代码
const allLoadedRef = useRef<boolean>(true); // 是否触底
const [current, setCurrent] = useState<number>(1); // 当前页
const [list, setList] = useState([]); // 列表
定义方法
复制代码
const getList = async () => {
    try {
      setLoading(true);
      // pageSize 最大 100,让用户感知不到 分页请求数据
      // 调用接口
      // 成功
      // 结构出后端返回给你的 total,赋值
        totalRef.current = total;
        // 10 为 pageSize
        if (current * 10 >= total) {
          allLoadedRef.current = false;
          return;
        }
    } catch {
      message.error('请求超时,请稍后再试!');
    } finally {
      setLoading(false);
    }
  };

监听 current

复制代码
 useEffect(() => {
    getList();
  }, [current]);

调用

复制代码
 <Select
  onPopupScroll={(e) => {
  const { target } = e;
  // clientHeight:客户可见的浏览器显示页面的高度。
  // scrollTop:滚动条的滑块距离浏览器页面最顶部的距离,即滚动条滑动了多少距离。
  // scrollHeight:返回元素的完整的高度
  const { clientHeight, scrollTop, scrollHeight } = target as any;
   if (clientHeight + parseInt(scrollTop) === scrollHeight) {
     //表示触底
     if (allLoadedRef.current) setCurrent((op) => op + 1);
   }
 }}
 onChange={onChange}
 >
 //遍历渲染  <Select.Option/>
 </Select>
相关推荐
万少几秒前
第五款 HarmonyOS 上架作品 奇趣故事匣 来了
前端·harmonyos·客户端
OpenGL6 分钟前
Android targetSdkVersion升级至35(Android15)相关问题
前端
rzl0222 分钟前
java web5(黑马)
java·开发语言·前端
Amy.Wang23 分钟前
前端如何实现电子签名
前端·javascript·html5
今天又在摸鱼26 分钟前
Vue3-组件化-Vue核心思想之一
前端·javascript·vue.js
蓝婷儿28 分钟前
每天一个前端小知识 Day 21 - 浏览器兼容性与 Polyfill 策略
前端
百锦再30 分钟前
Vue中对象赋值问题:对象引用被保留,仅部分属性被覆盖
前端·javascript·vue.js·vue·web·reactive·ref
jingling55534 分钟前
面试版-前端开发核心知识
开发语言·前端·javascript·vue.js·面试·前端框架
拾光拾趣录39 分钟前
CSS 深入解析:提升网页样式技巧与常见问题解决方案
前端·css
莫空000040 分钟前
深入理解JavaScript属性描述符:从数据属性到存取器属性
前端·面试