Picker 3.0.0
Picker组件,行为和特性与iOS原生的picker完全一致。
支持两种模式:静态模式和循环模式。
静态模式会完全按照传入的options渲染待选项,而循环模式会将options变成一个首尾循环的数据结构,可以无限地向上/向下滚动。
引用方式
import { Picker } from '$yo-component';
// 如果你的项目中未使用最新的 ykit-config-yo 插件,可能无法使用上面这个语法糖
// 你仍然可以通过下面这种方式来引用
import Picker from 'yo3/component/picker';
基础使用
Picker
使用方式与网页里的 <select>
十分相似。 你需要给它指定三个属性: options
(带选项的数据源, 数组形式),value
(当前选中的 option 的值)以及 onChange
(选中 option 发生改变时触发的事件回调)。
需要注意的是这是一个严格受控的组件,你必须同时配置 value
和 onChange
才能保证它正常工作。示例如下:
<Picker
options={[
{ value: 'option1', text:'选项1' },
{ value: 'option2', text:'选项2' },
// ...
]}
value={this.state.value}
onChange={option => {
this.setState({ value:option.value });
}}
// 自定义高度
height={200}
/>
options
是一个数组,里面的数据元素必须是对象,每个对象必须有 value
属性,这表示这个 option
的真实值。也可以给它设置 text
属性,这表示显示在组件中的 option
的文本。如果不设置 text
,会使用 value
作为 option
的文本。
另外需要注意的是 Picker
组件需要指定一个高度值才能正常工作,它有一个默认高度 150
,你可以通过设置 height
属性来改变它的高度。
循环模式
开启循环模式后(设置 looped
属性为 true),Picker
的 option 将会变成一个首尾相接的循环列表(参考 iOS 系统的闹钟设置):
<Picker
looped = {true}
// ...
/>
一般的建议是 option 的数量比较多时开启循环模式,这样可以降低用户选择的操作成本。
设置单位
使用 unit
属性可以在 Picker
的右侧展示一个单位栏,unit
的值作为单位栏的内容:
<Picker
unit="单位"
// ...
/>
使用场景
一般来说,Picker
需要和一个模态框系列组件结合使用,而不是直接放置在页面上。因为 Picker
的触摸事件和 Scroller
并不相容。下面是一个结合了 Popup
组件使用的弹出式的 Picker
。
如果没有特殊的定制化要求,你应该优先选择使用 PopupPicker
和 PopupDateTimePicker
,这两个组件封装了弹层的逻辑,更加易于使用。
<Popup
show={this.state.open}
onMaskTap={()=> {
this.setState({open: false});
}}
>
<Picker
height={200}
options={this.state.options}
onChange={(opt)=> {
this.setState({value: opt.value});
}}
value={this.state.value}
/>
</Popup>
如果需要把 Picker
直接放置在页面上,可以设置 stopPropagation
属性为 true
来阻止 Picker
的 touch 事件冒泡到 Scroller
上。这样在滑动 Picker
时它外层的 Scroller
并不会跟着滑动:
<Picker
stopPropagation={true}
// ...
/>
options { Array } #
picker的options,数组形式,元素的格式为{text:string,value:string}。
text为option显示的文本,value为option对应的真实值(参考网页option标签)。
text的缺省值为value,value必须传入,且只能为字符串/数字类型。
默认值: null
value { Number/String } #
组件的value,参考网页select标签的value属性。
value是一个严格受控属性,只能通过picker的父组件改变,你需要设置onChange属性来控制value属性的变化。
默认值: null
onChange { Function } #
组件划动时触发的事件回调,如果不设置这个属性,这个picker的value将无法根据picker的滚动改变。
onChange能够接收一个参数option,为当前选中的option的数据对象。
如果你不重新设置value,那么组件将会回滚到之前的值。
onChange和value的使用和网页中select对应属性的使用完全一致。
默认值: null
方法参数:
参数名 | 类型 | 描述 | 支持版本 |
---|---|---|---|
value | 当前的option的value |
height { Number } #
picker的高度,默认150。
Picker组件不能自适应容器的高度,必须为Picker组件显式地指定高度。
默认值: 150
looped { Bool } #
是否采用循环模式,默认为true。
默认值: true
unit { Number } #
显示在picker右侧的单位。
默认值: null
extraClass { String } #
附加给组件根节点的额外class。
默认值: null
stopPropagation { Bool } #
是否阻止默认事件传播,默认为false不阻止。
默认值: false