实现效果如下:
老实说实现方法很简单,antd-mobile提供了组件,只是没提供国家行政区数据,我只是把数据‘交给’这个组件罢了。
这里使用的是国家标准(GB/T2260),也就是2016年的标准行政区。
如果大佬有最新的数据,希望能分享一下
2022 更新 antd推荐使用china-division 提供的数据
代码中使用的数据: 行政区数据 ( 如果前面失效 链接: https://pan.baidu.com/s/1oqdihRVTknM_AdzX31oZzg 提取码: 54qx )
把上面下载的json文件放到下面同级文件夹下 参考这句引用let districtData = require('./location');
import {Picker} from 'antd-mobile'
import React from 'react'const CustomChildren = props => ({ backgroundColor: '#fff', paddingLeft: 15 }}>{ display: 'flex', height: '45px', lineHeight: '45px',position:'relative',borderBottom:0 }}>
{ flex: 1, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{props.children}
{ textAlign: 'right', color: '#888', marginRight: 15 }}>{props.extra}
);export default class extends React.Component {constructor(props){super(props);this.state={pickerValue: [],};}render(){let antdDistrict =[];let districtData = require('./location');Object.keys(districtData).forEach((index)=>{let itemLevel1 ={};let itemLevel2 ={};itemLevel1.value = districtData[index].code;itemLevel1.label = districtData[index].name;itemLevel1.children = [];let data = districtData[index].cities;Object.keys(data).forEach((index)=>{itemLevel2.value = data[index].code;itemLevel2.label = data[index].name;itemLevel2.children = [];let data2 = data[index].districts;let itemLevel3 ={};itemLevel3.children = [];Object.keys(data2).forEach((index)=>{itemLevel3.value = index;itemLevel3.label = data2[index];itemLevel2.children.push(itemLevel3);itemLevel3 ={};});itemLevel1.children.push(itemLevel2);itemLevel2 ={};});antdDistrict.push(itemLevel1)});console.log(antdDistrict);return (