Picker

滚动选择器。

普通选择器 mode = selector

属性 类型 默认值 说明
range Array / Object Array [] mode 为 selector 或 multiSelector 时 range 有效
dataMap Object { id: 'name', items: 'sub' } 当 range 是一个 Object Array 时,通过 dataMap 来指定 Object 中 key 的值作为选择器显示内容
value Number 0 selected 的值表示选择了 data 中的第几个(下标从 0 开始)
onChange function selected 改变时触发 change 事件
onCancel function bindcancel EventHandle 取消选择或点遮罩层收起 picker 时触发

多列选择器 mode = multiSelector

属性 类型 默认值 说明
range Array / Object Array [] mode 为 selector 或 multiSelector 时 range 有效
dataMap Object { id: 'name', items: 'sub' } 当 range 是一个 Object Array 时,通过 dataMap 来指定 Object 中 id 的值作为选择器显示内容, [{ name: '无脊柱动物', sub: [{name: '扁性动物',sub: [{name: '猪肉绦虫'},{name: '吸血虫'}]}]]
value Array [] selected 的值表示选择了 data 中的第几个(下标从 0 开始)
onChange function selected 改变时触发 change 事件
onCancel function bindcancel EventHandle 取消选择或点遮罩层收起 picker 时触发

日期选择器 | 时间选择器 type = date | time

属性 类型 默认值 说明
value String 当前时间 time 格式: hh:mm ; date 格式: YYYY-MM-DD
start String 开始 time 格式: hh:mm ; date 格式: YYYY-MM-DD
end String 结束 time 格式: hh:mm ; date 格式: YYYY-MM-DD
onChange function selected 改变时触发 change 事件
onCancel function bindcancel EventHandle 取消选择或点遮罩层收起 picker 时触发

省市区选择器 mode = region

属性 类型 默认值 说明
value Array [] 表示选中的省市区,默认选中每一列的第一个值
onChange function selected 改变时触发 change 事件
onCancel function bindcancel EventHandle 取消选择或点遮罩层收起 picker 时触发

示例代码

import React from '@react';
import XPicker from '@components/XPicker/index';
class P extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      show: false,
      index: 0,
      multiIndex: ['无脊柱动物', '扁性动物', '猪肉绦虫'],
      date: '2016-09-01',
      time: '12:01',
      region: ['广东省', '广州市', '海珠区'],
      multiArray: [
        {
          name: '无脊柱动物',
          sub: [
            {
              name: '扁性动物',
              sub: [
                {
                  name: '猪肉绦虫'
                },
                {
                  name: '吸血虫'
                }
              ]
            },
            {
              name: '线形动物',
              sub: [
                {
                  name: '蛔虫'
                }
              ]
            }
          ]
        },
        {
          name: '脊柱动物',
          sub: [
            {
              name: '鱼',
              sub: [
                {
                  name: '鲫鱼'
                },
                {
                  name: '带鱼'
                }
              ]
            }
          ]
        }
      ],
      list1: [
        'iphone',
        '华为',
        '小米',
        '三星',
        '魅族',
        '锤子',
        'oppo',
        'vivo',
        'iphone',
        '华为',
        '小米',
        '三星',
        '魅族',
        '锤子',
        'oppo',
        'vivo'
      ]
    };
  }

  showPicker() {
    console.log('showPicker');
    this.setState({
      show: true
    });
  }

  close() {
    console.log('close');
    this.setState({
      show: false
    });
  }

  change(e) {
    console.log('...', e);
    this.setState({
      index: e.value
    });
  }

  bindMultiPickerChange(e) {
    this.setState({
      multiIndex: e.value
    });
  }

  bindDateChange(e) {
    console.log('...bindDateChange', e);
    this.setState({
      date: e.value
    });
  }

  bindTimeChange(e) {
    this.setState({
      time: e.value
    })
  }

  bindRegionChange(e) {
    this.setState({
      region: e.value
    })
  }

  render() {
    return (
      <div class="picker-demo">
        <div class="picker-title">
          <text class="title-text">基本</text>
        </div>
        <div class="item-li">
          <text class="item-li-detail">一列</text>
          <XPicker
            value={0}
            onCancel={this.close.bind(this)}
            onChange={this.change.bind(this)}
            range={this.state.list1}
          >
            <text>当前选择:{this.state.list1[this.state.index]}</text>
          </XPicker>
        </div>
        <div class="item-li">
          <text class="item-li-detail">多列</text>
          <XPicker
            mode="multiSelector"
            value={this.state.multiIndex}
            onCancel={this.close.bind(this)}
            onChange={this.bindMultiPickerChange.bind(this)}
            range={this.state.multiArray}
          >
            <text>
              当前选择:{this.state.multiIndex[0]}, {this.state.multiIndex[1]},{' '}
              {this.state.multiIndex[2]}
            </text>
          </XPicker>
        </div>
        <div class="item-li">
          <text class="item-li-detail">日期选择器</text>
          <XPicker
            mode="date"
            value={this.state.date}
            start="2015-09-01"
            end="2017-09-01"
            onCancel={this.close.bind(this)}
            onChange={this.bindDateChange.bind(this)}
          >
            <text>当前选择:{this.state.date}</text>
          </XPicker>
        </div>
        <div class="item-li">
          <text class="item-li-detail">时间选择器</text>
          <XPicker
            mode="time"
            value={this.state.time}
            start="09:01"
            end="21:01"
            onCancel={this.close.bind(this)}
            onChange={this.bindTimeChange.bind(this)}
          >
            <text>当前选择:{this.state.time}</text>
          </XPicker>
        </div>
        <div class="item-li">
          <text class="item-li-detail">省市区选择器</text>
          <XPicker
            mode="region"
            value={this.state.region}
            onCancel={this.close.bind(this)}
            onChange={this.bindRegionChange.bind(this)}
          >
            <text>当前选择:{this.state.region[0]}, {this.state.region[1]},{this.state.region[2]}</text>
          </XPicker>
        </div>
      </div>
    );
  }
}

export default P;