Ant Design InputNumber 数字输入框:基本用法、API 参数与源码实现全解析
Ant Design InputNumber 数字输入框基本用法、API 参数与源码实现全解析【免费下载链接】ant-designAn enterprise-class UI design language and React UI library项目地址: https://gitcode.com/gh_mirrors/antde/ant-design本篇技术指南以 Ant Designantd仓库中 InputNumber 基本示例 为骨架系统讲解数字输入框的入门用法、核心 API 参数、样式尺寸规则及其底层实现原理。读完本文你将能够在表单场景中熟练使用InputNumber完成范围内的数值输入并能从源码层面理解min/max/step/defaultValue等属性是如何生效的。组件定位何时使用数字输入框在 Ant Design 的组件体系中InputNumber数字输入框属于表单类组件其组件文档components/input-number/index.md对它的定位描述非常精炼通过鼠标或键盘输入范围内的数值。何时使用当需要获取标准数值时例如商品数量、年龄段、价格区间、步进配置等场景。它区别于普通Input的关键点在于自带数值范围校验min/max支持通过步进按钮上下箭头按固定步长step增减数值保证输入结果为合法的数值类型而非自由文本。从仓库结构看InputNumber是典型的薄封装组件——它在 components/input-number/index.jsx 中直接包装了第三方基础组件rc-input-number依赖声明见 package.json 中rc-input-number: ~2.5.0antd 负责注入 Ant Design 的样式前缀与尺寸规范。基本用法一个完整可运行的示例基本示例components/input-number/demo/basic.md展示了InputNumber最核心的用法——限定 110 之间的整数默认值为 3并在数值变化时触发回调import { InputNumber } from antd; function onChange(value) { console.log(changed, value); } ReactDOM.render( InputNumber min{1} max{10} defaultValue{3} onChange{onChange} / , mountNode);拆解这个最小示例它一共用到了 4 个关键属性属性本次取值作用min1最小值数值不允许小于 1max10最大值数值不允许大于 10defaultValue3非受控模式下的初始值onChangeonChange数值变化回调参数为当前数值关于运行环境的说明示例中的React、ReactDOM、mountNode并非凭空出现。在 antd 的演示构建脚本 scripts/demo.js 中window.React与window.ReactDOM被显式挂载为全局变量mountNode由文档渲染框架注入因此 demo 代码可以直接使用ReactDOM.render(..., mountNode)挂载到页面节点。在自己的业务项目中你只需按正常 React 方式引入ReactDOM并指定真实的 DOM 容器即可。受控与非受控基本示例采用非受控写法通过defaultValue指定初始值此后用户操作由组件内部维护。若业务需要完全控制数值例如联动其他表单字段可使用受控写法通过value属性 onChange回调实现双向同步import { InputNumber } from antd; class Demo extends React.Component { getInitialState() { return { value: 3 }; } onChange(value) { this.setState({ value }); } render() { return InputNumber min{1} max{10} value{this.state.value} onChange{this.onChange} /; } }API 参数详解组件文档 components/input-number/index.md 给出了完整的属性表结合源码与使用经验逐项说明如下成员说明类型默认值min最小值Number-Infinitymax最大值NumberInfinityvalue当前值受控Number无step每次改变步数可以为小数Number or String1defaultValue初始值非受控Number无onChange变化回调Function无disabled禁用Booleanfalsesize输入框大小String无关键参数的行为细节min与max范围约束默认值分别为-Infinity与Infinity即默认不限制范围。一旦显式传入超出范围的输入会被组件拦截。基本示例中将范围收敛到1~10配合步进按钮用户只能得到该区间内的数值。step步长默认值为1从源码 components/input-number/index.jsx 的getDefaultProps中可以确认step: 1是 antd 层注入的默认值。它的类型声明为Number or String允许传入小数——步长的小数位数同时决定 value 的精度详见下文小数步长一节。size尺寸传入large或small时组件会分别在根节点上追加ant-input-number-lg与ant-input-number-sm类名见 components/input-number/index.jsx 中的classNames拼接逻辑默认不传则为标准尺寸。三种尺寸的用法与样式规格尺寸示例components/input-number/demo/size.md同时渲染了大、中、小三种规格import { InputNumber } from antd; function onChange(value) { console.log(changed, value); } ReactDOM.render( div InputNumber sizelarge min{1} max{100000} defaultValue{3} onChange{onChange} / InputNumber min{1} max{100000} defaultValue{3} onChange{onChange} / InputNumber sizesmall min{1} max{100000} defaultValue{3} onChange{onChange} / /div , mountNode);.ant-input-number{ margin-right: 10px; }从组件样式源码 style/components/inputNumber.less 中可以精确核对三种尺寸的高度规格尺寸输入框高度步进按钮区高度large-lg32px32px默认28px28pxsmall-sm22px22px其中默认尺寸的height: 28px、line-height: 28px、width: 80px直接定义在.ant-input-number基础样式中-lg与-sm两个修饰类则通过覆盖input-wrap、handler等内部结构的高度来实现尺寸切换。示例末尾的 CSS 片段margin-right: 10px用于在并排展示多个输入框时拉开间距纯属演示排版需要。步进按钮内部结构与交互细节InputNumber右侧的上下箭头步进按钮是它与普通输入框最直观的区别。从 style/components/inputNumber.less 的样式结构可以还原其内部 DOM 布局.ant-input-number-handler-wrap右侧按钮容器宽22px默认opacity: 0仅在鼠标悬停于整个输入框:hover时以0.24s的过渡渐显避免常驻按钮遮挡内容.ant-input-number-handler-up/.ant-input-number-handler-down两个半高按钮各占14px通过 iconfont 字符\e602/\e603渲染箭头图标hover 时按钮会轻微长高height: 16px并触发图标位移形成按压感到达min/max边界后对应方向按钮自动进入.handler-disabled状态颜色变浅#ccc、透明度0.72、cursor: default不再响应点击。这些细节意味着当数值抵达范围边界时步进按钮会呈现视觉禁用态用户能直观感知已经到顶/到底了。源码实现antd 是如何包装 rc-input-number 的components/input-number/index.jsx 的完整实现非常简洁全部逻辑如下import React from react; import classNames from classnames; import InputNumber from rc-input-number; export default React.createClass({ getDefaultProps() { return { prefixCls: ant-input-number, step: 1, }; }, render() { const { className, size, ...other } this.props; const inputNumberClass classNames({ [${this.props.prefixCls}-lg]: size large, [${this.props.prefixCls}-sm]: size small, [className]: !!className, }); return InputNumber className{inputNumberClass} {...other} /; } });从中可以提炼三个关键实现事实样式前缀统一prefixCls被固定为ant-input-number这正是 style/components/inputNumber.less 中input-number-prefix-cls: ant-input-number对应的类名前缀。二者配合保证组件样式开箱即用。尺寸仅由 className 驱动size属性不会透传给rc-input-number而是被解构出来转换成ant-input-number-lg/ant-input-number-sm后缀类名拼接到根节点上再交由样式表实现尺寸差异——这是典型的样式层接管尺寸设计。其余属性全量透传...other将min、max、value、defaultValue、step、disabled、onChange等全部交给底层rc-input-number处理antd 层不做重复拦截因此底层组件的边界校验、步进逻辑与受控行为均直接生效。进阶扩展与基本示例配套的三种典型场景InputNumber的 demo 目录还提供了三个与基本用法直接相关的进阶场景配合食用效果更佳。小数步长digitdemo/digit.md 演示了step传入小数的用法InputNumber min{1} max{10} step{0.1} onChange{onChange} /文档明确指出和原生的数字输入框一样value 的精度由 step 的小数位数决定。即步长为0.1时输入与步进得到的值将保留 1 位小数若需要更精细的价格类输入可相应提高 step 的小数位数。禁用状态disableddemo/disabled.md 展示通过按钮动态切换禁用状态InputNumber min{1} max{10} disabled{this.state.disabled} defaultValue{3} / Button onClick{this.toggle} typeprimaryToggle disabled/Button禁用后组件从样式到交互全面锁定style/components/inputNumber.less 中.ant-input-number-disabled会隐藏整个步进按钮区display: none输入框区域则应用cursor: not-allowed、背景#f3f3f3、文字透明度0.72的禁用视觉。受控切换与表单集成InputNumber常与Form组件components/form配合使用作为表单项通过onChange将数值同步进表单状态在需要严格限定取值范围的业务字段如年龄、库存、折扣中min/max/step组合即可在交互层完成大部分输入合法性约束。小结InputNumber是 Ant Design 表单体系中小而精的组件对外提供min、max、step、defaultValue、value、onChange、disabled、size八个核心属性即可覆盖绝大多数数值输入需求对内则通过rc-input-number承载步进与校验逻辑由ant-input-number前缀类名与 style/components/inputNumber.less 定义视觉规格。掌握了基本示例components/input-number/demo/basic.md与本文补充的 API、尺寸、步进、禁用细节你就可以在项目中直接、放心地使用它。适用版本说明本文示例与分析基于本仓库当前代码antd0.12.x依赖rc-input-number ~2.5.0API 名称与行为以当前仓库为准升级到其他版本时建议以对应版本的官方文档为准。【免费下载链接】ant-designAn enterprise-class UI design language and React UI library项目地址: https://gitcode.com/gh_mirrors/antde/ant-design创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →