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>
相关推荐
weixin_382395237 小时前
为小工厂量身打造:本地部署的物料管理系统带缺料计算
前端·制造
__zRainy__7 小时前
解决pnpm v10+不自动构建
前端·pnpm·工程化
猫猫不是喵喵.8 小时前
Vue3 Props 属性
前端·javascript·vue.js
醉城夜风~9 小时前
CSS元素显示模式(display)
前端·css
AI大模型-小华9 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
做前端的娜娜子12 小时前
同一链接实现 PC Web 与移动 H5 自适应
前端·掘金·金石计划
小帅不太帅12 小时前
架构没变、规模没变,DeepSeek V4 Flash 正式版凭什么暴涨 47 分?
前端·aigc·deepseek
jarvisuni12 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
卷福同学13 小时前
AI编程出海第二步:验证关键词能否做站
前端·人工智能·后端