NumberPicker 数字输入框
如果项目中使用的是 1.x 版本的基础组件(@alifd/next),请在左侧导航顶部切换组件版本。
安装方法
- 在命令行中执行以下命令
npm install @icedesign/base@latest -S
开发指南
何时使用
数字选择器,并对输入的数据做正确性检查、自动订正。
注意事项
自动订正可能会导致onChange返回值和你输入的数据不一样。
其中有些中间输入状态无法触发onChange,主要考虑到自动订正可能永远无法到达想要的值了。例如:
0
=>0.
=>0.0
=>0.01
中间两步不会触发onChange,因为如果订正会一直停留在0导致永远无法到达想要的值min=10 的情况下, 输入
1
=>12
第一步1
不会触发onChange也不会订正数据,因为数字是一个一个输入的
如果输入时没触发onChange,会在onBlur检测数据正确性并触发onChange
API
数字输入框
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
prefix | 样式前缀 | String | 'next-' |
type | 设置类型可选值:'normal'(普通)'inline'(内联) | Enum | 'normal' |
value | 当前值 | Number | - |
defaultValue | 默认值 | Number | 0 |
step | 步长 | Number/String | 1 |
editable | 用户是否可以输入 | Boolean | true |
inputWidth | 输入框的宽度 | Number/String | - |
onChange | 数值被改变的事件签名:Function(value: Number, e: Event) => void参数:value: {Number} 数据e: {Event} DOM事件对象 | Function | function noop() { } |
onKeyDown | 键盘按下签名:Function() => void | Function | function noop() { } |
onFocus | 焦点获得签名:Function() => void | Function | function noop() { } |
onBlur | 焦点失去签名:Function() => void | Function | function noop() { } |
onDisabled | 按钮被禁用时候点击的回调签名:Function(e: Event) => void参数:e: {Event} DOM事件对象 | Function | function noop() { } |
onCorrect | 数值订正后的回调签名:Function(obj: Object) => void参数:obj: {Object} {currentValue,oldValue:String} | Function | function noop() { } |
max | 最大值 | Number | Infinity |
min | 最小值 | Number | -Infinity |
className | 自定义class | String | - |
style | 自定义内联样式 | Object | {} |
代码示例
如果是点击+
-
触发,可以通过 e.triggerType
获取onChange 第二个参数 e.type 可以获取事件类型。
查看源码在线预览
import { NumberPicker } from "@icedesign/base";
function onChange(value, e) {
console.log(value, e.type, e.triggerType);
}
ReactDOM.render(
<div>
<NumberPicker onChange={onChange} />
</div>,
mountNode
);
不可用的 number picker。
查看源码在线预览
import { NumberPicker } from "@icedesign/base";
ReactDOM.render(
<div>
<NumberPicker disabled />
<br />
<br />
<NumberPicker type="inline" disabled />
</div>,
mountNode
);
用户不可直接输入编辑数据
查看源码在线预览
import { NumberPicker, Button } from "@icedesign/base";
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
editable: false,
value: 0
};
}
toogle() {
this.setState({
editable: !this.state.editable
});
}
onChange(value) {
console.log("changed", value);
this.setState({
value: value
});
}
render() {
return (
<div>
<NumberPicker
onChange={this.onChange.bind(this)}
value={this.state.value}
editable={this.state.editable}
/>
<br />
<br />
<Button onClick={this.toogle.bind(this)}>
切换到 {!this.state.editable ? "可编辑" : "不可编辑"}
</Button>
</div>
);
}
}
ReactDOM.render(<App />, mountNode);
type 为 inline 的 number picker。
查看源码在线预览
import { NumberPicker } from "@icedesign/base";
function onChange(value) {
console.log("changed", value);
}
ReactDOM.render(
<div>
<NumberPicker type="inline" onChange={onChange} />
</div>,
mountNode
);
inputWidth 控制input宽度
查看源码在线预览
import { NumberPicker } from "@icedesign/base";
ReactDOM.render(
<div>
<NumberPicker inputWidth={"60px"} defaultValue={100000} />
</div>,
mountNode
);
当数据自动订正会触发 onCorrectmin max 来限制value的最大最小值。
查看源码在线预览
import { NumberPicker } from "@icedesign/base";
function onChange(value, e) {
console.log(value, e);
}
function onDisabled(e) {
console.log(e);
}
function onCorrect(obj) {
console.log(obj);
}
ReactDOM.render(
<div>
<NumberPicker
type="inline"
step={3}
min={6}
max={30}
defaultValue={6}
onChange={onChange}
onDisabled={onDisabled}
onCorrect={onCorrect}
/>
</div>,
mountNode
);
通过step控制每次加减步长
查看源码在线预览
import { NumberPicker } from "@icedesign/base";
function onChange(value) {
console.log("changed", value);
}
function onCorrect(obj) {
console.log(obj);
}
ReactDOM.render(
<div>
<NumberPicker onChange={onChange} onCorrect={onCorrect} step={0.01} />
</div>,
mountNode
);