省市区三级联动taro多列选择器

import Taro, { Component, Config } from '@tarojs/taro'
import { View, Picker } from '@tarojs/components'
import './index.scss'
import address from '../../utils/city'

export default class Index extends Component {
  state = {
    province: '',
    city: '',
    area: '',
    pickerShow: false,
    value: [0, 0, 0],
    provinces: address.provinces,
    citys: address.citys[110000],
    areas: address.areas[110100],
    ranges: [[], [], []],
  }

  componentDidShow() {
    this.cityChange()
  }

  columnChange(e) {
    const { provinces, citys, value } = this.state
    const column = e.detail.column
    const evalue = e.detail.value
    let provinceNum = value[0]
    let cityNum = value[1]
    let countyNum = value[2]
    if (column == 0) {
      provinceNum = evalue
      const id = provinces[provinceNum].id
      this.setState({
        value: [provinceNum, 0, 0],
        citys: address.citys[id],
        areas: address.areas[address.citys[id][0].id]
      }, () => {
        this.cityChange()
      })
    } else if (column == 1) {
      cityNum = evalue
      const id = citys[cityNum].id
      // console.log(id)
      this.setState({
        value: [provinceNum, cityNum, 0],
        areas: address.areas[citys[cityNum].id]
      }, () => {
        this.cityChange()
      })
    } else {
      // 滑动选择了区
      countyNum = evalue
      this.setState({
        value: [provinceNum, cityNum, countyNum]
      }, () => {
        this.cityChange()
      })
    }
  }
  cityChange() {
    const { provinces, citys, areas } = this.state
    let ranges = [[], [], []]
    for (let i = 0; i < provinces.length; i++) {
      ranges[0].push(provinces[i].name)
    }
    for (let i = 0; i < citys.length; i++) {
      ranges[1].push(citys[i].name)
    }
    for (let i = 0; i < areas.length; i++) {
      ranges[2].push(areas[i].name)
    }
    this.setState({
      ranges: ranges,
    })
  }
  //  params true代表传递地址,false不传递
  handlePickerShow(params: boolean, e) {
    // console.log('params', params)
    if (params) {
      const { provinces, citys, areas, value } = this.state
      const p = provinces[value[0]].name
      const c = citys[value[1]].name
      const a = areas[value[2]].name
      this.setState({
        pickerShow: !this.state.pickerShow,
        province: p || '',
        city: c || '',
        area: a || '',
      })
    }
  }

  render() {
    return (
      <View>
        <Picker mode='multiSelector' range={this.state.ranges} onChange={this.handlePickerShow.bind(this)} onColumnChange={this.columnChange.bind(this)}>
          <View>
            {this.state.province && <View>{this.state.province} {this.state.city} {this.state.area}</View>}
            {!this.state.province && <View>请选择地区</View>}
          </View>
        </Picker>
      </View>
    )
  }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Taro 是一种支持使用 React 进行多端开发的框架,可用于开发小程序、H5、RN 等多个平台的应用。在 Taro 中,可以使用第三方组件库来快速构建复杂的 UI 组件,其中包括日期选择。 在 Taro 中,可以使用 taro-ui 组件库中的 DatePicker 组件来实现日期选择。使用 DatePicker 组件需要先安装 taro-ui 组件库,具体安装方法可以参考官方文档。 安装完成后,在需要使用日期选择的页面中引入 DatePicker 组件,例如: ```jsx import { DatePicker } from '@tarojs/taro-ui' // ... <DatePicker mode='date' value={this.state.date} onChange={this.handleDateChange} /> ``` 在上述代码中,使用了 DatePicker 组件,并设置了 mode、value 和 onChange 三个属性。其中,mode 属性用于设置日期选择的模式,可以是 date、time、month 和 year 中的一个;value 属性用于设置当前选中的日期值;onChange 属性用于监听日期选择的变化事件,并将选中的日期值传递到回调函数中。 在页面中还需要定义 handleDateChange 回调函数来处理日期选择的变化事件,例如: ```jsx handleDateChange = e => { this.setState({ date: e.detail.value }) } ``` 在上述代码中,使用了 setState 方法来更新页面的状态,从而实现日期选择的更新。 除了 DatePicker 组件,taro-ui 还提供了 Calendar、Picker 等其他组件,可以根据具体需求选择合适的组件来实现日期选择

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值