基于Antd远程搜索Select 受控组件,接受所有Antd Select API,参数灵活可配置
发布日期:2021-05-14 15:29:01 浏览次数:19 分类:精选文章

本文共 2070 字,大约阅读时间需要 6 分钟。

Ant Design Select 组件自定义实现

基于 Ant Design 的 Select 组件,结合 Remote搜索、分页技术,以及自定义样式实现的增强版本。

功能特点

支持多选/单选模式,提供搜索功能,同时支持分页加载和 Debounce 防抖技术,适用于需要动态加载数据场景。

组件结构

应用了 React 巧用状态管理与 Effect Hook,搭配 Ant Design Select 组件实现自定义功能。

Core Component 组成部分

  • 状态管理

    • loading 状态用于指示 loading 过程
    • list 用于存储选项数据
    • searchText 存储搜索输入内容,用于 Debounce 加载
    • pageSize 每页加载数量,默认为 15
    • curPage 指定分页页码
    • pageSt 滚动距离,用于判断是否进行分页加载
    • lastPage 判断是否为最后一页
  • Effect Hook

    • 初始化列表数据
    • 搜索触发回调函数,通过 Debounce 防抖优化
    • 监控搜索输入,触发数据获取
    • 处理 API 回响,分页加载以及数据合并
  • 自定义样式

    • .ant-select-selection-item 下拉框内容样式
    • .ant-select-item-option-selected 选项选中样式
    • .ant-select-dropdown 弹出框样式
    • 消息提示风格
  • 功能模块

    搜索与 Debounce 加载

    • 在输入框输入内容时,触发搜索回调
    • 使用 react-use 库进行 Debounce,防止频繁的重复请求
    • 处理搜索结果数据,更新列表

    数据获取与分页处理

    • 通过 axios 进行 HTTP 请求
    • 分页参数包含 currentpageSize
    • 根据返回数据,判断是否需要滚动分页
    • 合并历史数据或新加载数据,更新列表

    作用域及事件处理

    默认接收 props 并进行处理,按需传递参数

    • handleList 外部处理数据
    • onClear 清除搜索内容
    • handleSearch 搜索触发
    • onPopupScroll 滚动触发分页

    应用场景

  • 适用于需要动态加载数据的 Select 组件场景
  • 支持分页加载和搜索功能,而无需手动刷新
  • 可扩展各种自定义样式和行为
  • CSS样式

    .custom-select {
    .ant-select-selection-item {
    height: auto;
    }
    .ant-select-item-option-selected:not(.ant-select-item-option-disabled) .ant-select-item-option-content {
    padding-right: 0;
    }
    .ant-select-dropdown {
    width: auto !important;
    .label-key {
    max-width: 200px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    }
    .select-top-title {
    display: flex;
    justify-content: space-between;
    .top-label-key {
    float: left;
    max-width: 200px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    }
    .right-label-key {
    float: right;
    color: #8593a5;
    font-size: 12px;
    margin-left: 10px;
    max-width: 100px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    }
    }
    .bottom-label-key {
    color: #8593a5;
    font-size: 12px;
    max-width: 240px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    }
    }
    }

    本实现主要目标是优化 Select 组件的可用性,适合需要动态加载和分页场景,同时提供细化的样式调整点。

    上一篇:Vue项目中支持可选链(链判断运算符)操作
    下一篇:基于ElementUI远程搜索Select组件,接受所有elementUI Select API,参数灵活可配置

    发表评论

    最新留言

    网站不错 人气很旺了 加油
    [***.192.178.218]2025年04月29日 05时58分00秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章