尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Ant Design Select 组件完全指南:API 参数、九大实战场景与源码级原理剖析

Ant Design Select 组件完全指南:API 参数、九大实战场景与源码级原理剖析 Ant Design Select 组件完全指南API 参数、九大实战场景与源码级原理剖析【免费下载链接】ant-designAn enterprise-class UI design language and React UI library项目地址: https://gitcode.com/gh_mirrors/antde/ant-designSelect 选择器是 Ant Designantd表单体系中最常用的组件之一它以可扩展的下拉菜单替代原生select并支持多选、标签输入、远程搜索、组合输入等增强能力。本文以 components/select/index.md 为骨架结合仓库中的完整示例与 组件封装源码系统讲解 Select 的 API、九大典型使用场景及底层实现细节帮助你写出可维护、可复用的企业级选择器代码。组件定位与适用场景Select 是一个类似 Select2 的选择器其核心价值在于弹出一个下拉菜单给用户选择操作用于代替原生选择器在需要更优雅的多选器时提供标签化tag与多选multiple能力通过combobox模式实现输入框自动提示通过showSearch实现内置搜索过滤。基本用法十分直观Select内嵌若干个Option即可Select Option valuelucylucy/Option /Select从 组件封装源码 可以看到antd 的 Select 是基于rc-select的二次封装AntSelect直接透传 props 给底层Select并默认注入prefixCls: ant-select、transitionName: slide-up、choiceTransitionName: zoom同时默认关闭搜索框showSearch: false。封装组件同时挂载了Option与OptGroup两个静态子组件因此在使用时可以通过Select.Option、Select.OptGroup直接访问。Select props 完整 API 详解Select组件的 props 分为三类值控制、行为模式、交互回调。下表完整列出官方文档定义的参数参数说明类型默认值value指定当前选中的条目string / ArrayString无defaultValue指定默认选中的条目string / ArrayString无multiple支持多选booleanfalseallowClear支持清除单选模式有效booleanfalsefilterOption是否根据输入项进行筛选可为一个函数返回满足要求的 option 即可boolean 或 function(inputValue, option)truetags可以把随意输入的条目作为 tag输入项不需要与下拉选项匹配booleanfalseonSelect被选中时调用参数为选中项的 value 值function(value, option)无onDeselect取消选中时调用参数为选中项的 option value 值仅在 multiple 或 tags 模式下生效function(value)无onChange选中 option或 input 的 value 变化combobox 模式下时调用此函数function(value, label)无onSearch文本框值变化时回调function(value: String)无placeholder选择框默认文字string无searchPlaceholder搜索框默认文字string无notFoundContent当下拉列表为空时显示的内容stringNot FounddropdownMatchSelectWidth下拉菜单和选择器同宽booleantrueoptionFilterProp搜索时过滤对应的 option 属性如设置为 children 表示对内嵌内容进行搜索stringvaluecombobox输入框自动提示模式booleanfalsesize选择框大小可选largesmallStringdefaultshowSearch在下拉中显示搜索框booleanfalsedisabled是否禁用booleanfalsegetPopupContainer菜单渲染父节点。默认渲染到 body 上如果你遇到菜单滚动定位问题试试修改为滚动的区域并相对其定位Function(triggerNode)() document.body针对几个容易混淆的参数结合源码与示例补充说明value与defaultValuevalue为受控值配合onChange使用可实现完全受控defaultValue仅用于初始化。多选/标签模式下两者都接收字符串数组ArrayString例如defaultValue{[a10, c12]}。filterOption默认true表示按optionFilterProp指定的属性做内置过滤设为false时关闭过滤常用于动态加载数据的场景见智能提示示例也可以传入(inputValue, option) boolean自定义过滤规则。optionFilterProp默认按value属性过滤设置为children则对内嵌文本内容进行搜索见带搜索框示例。allowClear官方文档特别注明仅在单选模式下有效多选模式下清除应通过受控 value 实现。onDeselect仅在multiple或tags模式下生效用于感知用户取消选中某一项。getPopupContainer默认把下拉菜单渲染到document.body。当页面存在滚动容器导致菜单定位异常时应将其改为返回滚动区域节点并相对该区域定位。Option 与 OptGroup propsOption代表单个选项props 定义如下参数说明类型默认值disabled是否禁用Booleanfalsekey如果 react 需要你设置此项此项值与 value 的值相同然后可以省略 value 设置String-value默认根据此属性值进行筛选String-OptGroup用于选项分组参数说明类型默认值label组名String / React.Element无key-String-使用注意key与value相同时可只设置keyOption的disabled仅禁用单个选项而Select的disabled禁用整个选择器。二者可组合出大部分选项可选、个别选项置灰的效果见 基本使用示例。基础用法单选、默认值与禁用基本使用示例 展示了最典型的场景——单选、默认选中与禁用import { Select } from antd; const Option Select.Option; function handleChange(value) { console.log(selected ${value}); } ReactDOM.render( div Select defaultValuelucy style{{ width: 120 }} onChange{handleChange} Option valuejackJack/Option Option valuelucyLucy/Option Option valuedisabled disabledDisabled/Option Option valueyimingheyiminghe/Option /Select Select defaultValuelucy style{{ width: 120 }} disabled Option valuelucyLucy/Option /Select /div , mountNode);两个要点onChange回调的第一个参数即被选中项的value值第二个 Select 通过disabled属性整体禁用适用于只读展示类表单场景。内置搜索showSearch 与 optionFilterProp带搜索框示例 演示了在下拉浮层顶部展示搜索框的单选器Select showSearch style{{ width: 200 }} placeholder请选择人员 optionFilterPropchildren notFoundContent无法找到 searchPlaceholder输入关键词 onChange{handleChange} Option valuejack杰克/Option Option valuelucy露西/Option Option valuetom汤姆/Option /Select关键点showSearch开启搜索框注意封装源码中该属性默认值为 falseoptionFilterPropchildren让过滤基于选项显示文本而非 value——这对中文名称选项尤其重要用户输入杰即可命中杰克searchPlaceholder定制搜索框占位文案notFoundContent定制无匹配结果时的提示覆盖默认的 Not Found。多选模式multiple 与数组值多选示例 演示从已有条目中多选let children []; for (let i 10; i 36; i) { children.push(Option key{i.toString(36) i}{i.toString(36) i}/Option); } Select multiple style{{ width: 400 }} defaultValue{[a10, c12]} onChange{handleChange} {children} /Select要点multiple模式下value/defaultValue必须是字符串数组选项可用key代替value此时 key 即作为 value 参与筛选与回传。多选模式还支持onDeselect回调感知用户移除某个已选项。标签模式tags 与自由输入标签示例 与multiple的区别在于——输入项不需要与下拉选项匹配用户随意输入的内容都会被当作新 tag 保留Select tags style{{ width: 100% }} searchPlaceholder标签模式 onChange{handleChange} {children} /Selecttags模式常用于打标签类需求如给文章添加关键词非常适合与onSearch配合做联想。需要注意的是标签模式下onDeselect同样生效。智能提示combobox 与动态数据智能提示示例 以账号注册表单为例演示输入框自动完成输入前缀后动态生成邮箱域名候选项。const Test React.createClass({ getInitialState() { return { options: [] }; }, handleChange(value) { let options; if (!value || value.indexOf() 0) { options []; } else { options [gmail.com, 163.com, qq.com].map((domain) { const email ${value}${domain}; return Option key{email}{email}/Option; }); } this.setState({ options }); }, render() { // filterOption 需要设置为 false数据是动态设置的 return ( Select combobox style{{ width: 200 }} onChange{this.handleChange} filterOption{false} placeholder请输入账户名 {this.state.options} /Select ); } });核心机制combobox模式下onChange会随输入框值的变化触发而非仅选中时因此用它驱动setState即可实现动态选项。示例注释明确提示数据是动态设置的因此必须将filterOption设为false避免内置过滤干扰动态结果。选项分组OptGroup分组示例 展示用OptGroup对选项分组适合按部门/类别组织选项的场景Select defaultValuelucy style{{ width: 200 }} showSearch{false} onChange{handleChange} OptGroup labelManager Option valuejackjack/Option Option valuelucylucy/Option /OptGroup OptGroup labelEngineer Option valueyimingheyiminghe/Option /OptGroup /SelectOptGroup的label支持String或React.Element因此组名也可以是带图标的富文本节点。远程搜索与搜索框组合搜索框示例 是更进阶的实战模板——将Input.Group、comboboxSelect 与搜索按钮组合通过 jsonp 调用远程接口获取建议示例调用了淘宝 suggest 接口实现输入防抖 远程联想 提交搜索完整链路。function fetch(value, callback) { if (timeout) { clearTimeout(timeout); timeout null; } currentValue value; function fake() { const str querystring.encode({ code: utf-8, q: value }); jsonp(http://suggest.taobao.com/sug?${str}, (err, d) { if (currentValue value) { // 仅当输入未被新值覆盖时才回填 const data d.result.map(r ({ value: r[0], text: r[0] })); callback(data); } }); } timeout setTimeout(fake, 300); // 300ms 防抖 }值得借鉴的实现细节300ms 防抖连续输入只触发最后一次请求竞态保护currentValue变量记录最新输入值回调中比对后才写入结果避免旧请求覆盖新结果defaultActiveFirstOption{false}避免自动高亮第一个选项干扰用户输入showArrow{false}隐藏下拉箭头呈现纯输入框形态notFoundContent不显示默认的 Not Found 提示。三种尺寸与级联联动三种大小示例 说明尺寸规则size为large时输入框高度32pxsmall时22px默认28px。该逻辑由 封装源码 实现——根据size拼接ant-select-lg/ant-select-sm样式类最终样式定义在 style/components/select.less。联动示例 实现经典的省市级联第一个 Select 的onChange更新城市数据源第二个 Select 通过受控value跟随变化。文档同时给出建议复杂级联场景推荐直接使用 cascader 级联组件其数据结构与交互专为此设计代码更简洁。源码级要点速查结合 组件封装源码 可以确认以下实现事实默认 props 注入prefixCls: ant-select、transitionName: slide-up下拉展开动画、choiceTransitionName: zoom选中项动画、showSearch: falsecombobox模式下notFoundContent会被强制置为null即智能提示场景默认不展示无匹配文案组件静态挂载Option、OptGroup与rc-select的底层实现保持一致所有未拦截的 props 均透传至底层组件尺寸通过 className 实现不影响业务逻辑样式统一收敛在 style/components/select.less。掌握以上 API 与模式组合即可覆盖单选、多选、标签、搜索、远程联想、分组与级联等绝大多数企业级选择需求遇到下拉定位问题时优先检查getPopupContainer遇到数据动态加载问题时优先检查filterOption是否关闭。【免费下载链接】ant-designAn enterprise-class UI design language and React UI library项目地址: https://gitcode.com/gh_mirrors/antde/ant-design创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表