
基于Antd远程搜索Select 受控组件,接受所有Antd Select API,参数灵活可配置
适用于需要动态加载数据的 Select 组件场景 支持分页加载和搜索功能,而无需手动刷新 可扩展各种自定义样式和行为
发布日期: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
每页加载数量,默认为 15curPage
指定分页页码pageSt
滚动距离,用于判断是否进行分页加载lastPage
判断是否为最后一页
Effect Hook
- 初始化列表数据
- 搜索触发回调函数,通过 Debounce 防抖优化
- 监控搜索输入,触发数据获取
- 处理 API 回响,分页加载以及数据合并
自定义样式
- .
ant-select-selection-item
下拉框内容样式 - .
ant-select-item-option-selected
选项选中样式 - .
ant-select-dropdown
弹出框样式 - 消息提示风格
功能模块
搜索与 Debounce 加载
- 在输入框输入内容时,触发搜索回调
- 使用
react-use
库进行 Debounce,防止频繁的重复请求 - 处理搜索结果数据,更新列表
数据获取与分页处理
- 通过 axios 进行 HTTP 请求
- 分页参数包含
current
和pageSize
- 根据返回数据,判断是否需要滚动分页
- 合并历史数据或新加载数据,更新列表
作用域及事件处理
默认接收 props 并进行处理,按需传递参数
handleList
外部处理数据onClear
清除搜索内容handleSearch
搜索触发onPopupScroll
滚动触发分页
应用场景
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 组件的可用性,适合需要动态加载和分页场景,同时提供细化的样式调整点。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月29日 05时58分00秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
圆排列问题
2019-03-11
课程总结
2019-03-11
认识CMake及应用
2019-03-11
CMake的主体框架
2019-03-11
微积分(三)
2019-03-11
Oracle
2019-03-11
软件工程应用
2019-03-11
数据科学
2019-03-11
函数与高级变量
2019-03-11
键盘事件
2019-03-11
2020-11月计划实施表
2019-03-11
折线图
2019-03-11
常识:
2019-03-11
注册页面案例
2019-03-11
np.bincount(x)的简单解释
2019-03-11
一些面试的准备的回答
2019-03-11
LeetCode Top-100 T22-括号生成
2019-03-11
svg基础+微信公众号交互(二)
2019-03-11
vscode设置eslint保存文件时自动修复eslint错误
2019-03-11
deepin 安装过程记录
2019-03-11