[RN] 全国城市列表选择 (包含定位城市、热门城市、全国城市)
生活随笔
收集整理的這篇文章主要介紹了
[RN] 全国城市列表选择 (包含定位城市、热门城市、全国城市)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?全國城市列表選擇 (包含定位城市、熱門城市、全國城市)
?
用ScrollView 實現,解決 SectionList 實現的卡頓問題?
?
實現效果如圖:
?
代碼實現如圖:
主邏輯文件?cityList.js
'use strict'; import React, {Component} from "react" import {Dimensions, ScrollView, StyleSheet, Text, TouchableOpacity, View} from 'react-native'; import cityDatas from "./cityIndex";const {width, height} = Dimensions.get('window'); // 適配性函數 const UIWIDTH = 750;let hotCitys = []; let defaultHotCityArray = [{cityCode: "310000", cityName: "上海市"},{cityCode: "440300", cityName: "深圳市"},{cityCode: "110000", cityName: "北京市"},{cityCode: "440100", cityName: "廣州市"}, ];const sectionWidth = 20; const statusHeight = 88; const sectionTopBottomHeight = 60; const sectionItemHeight = (height - sectionTopBottomHeight * 2 - statusHeight) / cityDatas.length; const ROW_HEIGHT = 48;let totalHeight = []; let letters = [];export function rx(UIPX) {return Math.round(UIPX * width / UIWIDTH); }export default class cityList extends Component {constructor(props) {super(props);totalHeight = this._gotTotalHeightArray();letters = this._gotLettersArray();}state = {currentCity: "正在定位...",isLocation: false,sectionListDatas: cityDatas,letterWords: 'A'};// 獲取每個字母區域的高度 _gotTotalHeightArray() {let totalArray = []for (let i = 0; i < cityDatas.length; i++) {let eachHeight = ROW_HEIGHT * (cityDatas[i].data.length + 1);totalArray.push(eachHeight);}return totalArray}// 獲取字母列表頭 _gotLettersArray() {let LettersArray = []for (let i = 0; i < cityDatas.length; i++) {let element = cityDatas[i];LettersArray.push(element.title)}return LettersArray}componentWillMount() {this.gotCurrentLocation();this.requestHotCityList();}async gotCurrentLocation() {this.setState({currentCity: "北京",isLocation: true})}requestHotCityList() {hotCitys = defaultHotCityArray}currentCityAction(name) {}// 點擊右側字母滑動到相應位置 scrollToList(item, index) {let position = 0;for (let i = 0; i < index; i++) {position += totalHeight[i]}this.refs.ScrollView.scrollTo({y: position})}/*右側索引*/_renderSideSectionView() {const sectionItem = cityDatas.map((item, index) => {return (<Text onPress={() => this.scrollToList(item, index)} key={index} style={styles.rightSideText}>{item.sortLetters}</Text>)});return (<View style={styles.rightSlideArea} ref="sectionItemView">{sectionItem}</View>);}// 渲染城市列表 _renderCityList() {let lists = [];for (let i = 0; i < cityDatas.length; i++) {let sections = cityDatas[i];let header =<View key={sections.title} style={styles.cityLetterBox}><Text style={styles.cityLetterText}>{sections.sortLetters}</Text></View>;lists.push(header);for (let j = 0; j < sections.data.length; j++) {let element = sections.data[j];let cityCell =<TouchableOpacity key={element.name + j} onPress={() => {this.selectCity(element)}}><View style={styles.cityTextBox}><Text style={styles.cityTextStyle}>{element.name}</Text></View></TouchableOpacity>;lists.push(cityCell);}}return lists;}selectCity(cityItem) {// alert(cityItem.cityCode); console.log(cityItem)}renderHotCityArray(hotCityArray) {let eleArray = [];let subArray = hotCityArray.slice(0, 12);for (let index = 0; index < subArray.length; index++) {const element = subArray[index];const ele =<TouchableOpacity key={element.cityCode} onPress={() => {}}><View style={[styles.textView, {marginTop: 10}]}><Text style={{color: "#333333", fontSize: 14,}}>{element.cityName}</Text></View></TouchableOpacity>;eleArray.push(ele);}return eleArray;}render() {return (<View style={{flex: 1}}><View style={{backgroundColor: "#FFFFFF",}} ref='topViews'><Text style={styles.titleText}>當前定位城市</Text><View style={styles.currentView}><TouchableOpacity onPress={() => {this.currentCityAction(this.state.currentCity)}}style={{width: 100,}}><View style={[styles.textView, {marginLeft: 15, width: 100,}]}><Text style={{color: "#C49225", fontSize: 14,}}>{this.state.currentCity}</Text></View></TouchableOpacity></View><Text style={styles.titleText}>熱門城市</Text><View style={styles.hotView}>{this.renderHotCityArray(hotCitys)}</View></View><ScrollView style={{backgroundColor: '#FFFFFF',}} ref="ScrollView">{this._renderCityList()}</ScrollView>{this._renderSideSectionView()}</View>)} } const styles = StyleSheet.create({scrollView: {backgroundColor: "#ECEBED"},titleText: {marginLeft: 30,marginTop: 20,color: "#999999",fontSize: 13,},currentView: {marginTop: 10,paddingBottom: 20},textView: {minWidth: 40,height: 30,justifyContent: "center",alignItems: "center",backgroundColor: "#FFF",borderRadius: 5,paddingLeft: 10,paddingRight: 10,marginRight: 10,},hotView: {marginTop: 5,flexDirection: "row",flexWrap: "wrap",justifyContent: "space-between",marginLeft: 30,marginRight: 25,paddingBottom: 20,marginBottom: 15,},rightSlideArea: {position: 'absolute',width: sectionWidth,height: height - sectionTopBottomHeight * 2, right: 5,top: 0,marginTop: sectionTopBottomHeight,marginBottom: sectionTopBottomHeight,},rightSideText: {textAlign: 'center',alignItems: 'center',height: sectionItemHeight,lineHeight: sectionItemHeight,color: '#C49225'},cityLetterBox: {height: ROW_HEIGHT,backgroundColor: '#F4F4F4',justifyContent: 'center',},cityLetterText: {color: "#999",fontSize: 17,marginLeft: 20,},cityTextBox: {height: ROW_HEIGHT,justifyContent: 'center',backgroundColor: '#FFFFFF',marginLeft: 20,},cityTextStyle: {color: '#333333',fontSize: 14,},});?
數據文件:
cityIndex.js
export default [{"sortLetters":"A","data":[{"id":"152900","name":"阿拉善盟"},{"id":"210300","name":"鞍山"},{"id":"340800","name":"安慶"},{"id":"410500","name":"安陽"},{"id":"513200","name":"阿壩藏族羌族自治州"},{"id":"520400","name":"安順"},{"id":"542500","name":"阿里地區"},{"id":"610900","name":"安康"},{"id":"659002","name":"阿拉爾"},{"id":"652900","name":"阿克蘇地區"},{"id":"654300","name":"阿勒泰地區"}]},{"sortLetters":"B","data":[{"id":"110100","name":"北京"},{"id":"130600","name":"保定"},{"id":"150200","name":"包頭"},{"id":"150800","name":"巴彥淖爾"},{"id":"210500","name":"本溪"},{"id":"220600","name":"白山"},{"id":"220800","name":"白城"},{"id":"340300","name":"蚌埠"},{"id":"341600","name":"亳州"},{"id":"371600","name":"濱州"},{"id":"450500","name":"北海"},{"id":"451000","name":"百色"},{"id":"469025","name":"白沙黎族自治縣"},{"id":"469029","name":"保亭黎族苗族自治縣"},{"id":"511900","name":"巴中"},{"id":"520500","name":"畢節"},{"id":"530500","name":"保山"},{"id":"610300","name":"寶雞"},{"id":"620400","name":"白銀"},{"id":"659005","name":"北屯"},{"id":"652700","name":"博爾塔拉蒙古自治州"},{"id":"652800","name":"巴音郭楞蒙古自治州"}]},{"sortLetters":"C","data":[{"id":"130800","name":"承德"},{"id":"130900","name":"滄州"},{"id":"140400","name":"長治"},{"id":"150400","name":"赤峰"},{"id":"220100","name":"長春"},{"id":"320400","name":"常州"},{"id":"341100","name":"滁州"},{"id":"341700","name":"池州"},{"id":"430100","name":"長沙"},{"id":"430700","name":"常德"},{"id":"431000","name":"郴州"},{"id":"445100","name":"潮州"},{"id":"451400","name":"崇左"},{"id":"469026","name":"昌江黎族自治縣"},{"id":"469023","name":"澄邁縣"},{"id":"510100","name":"成都"},{"id":"532300","name":"楚雄彝族自治州"},{"id":"540300","name":"昌都"},{"id":"652300","name":"昌吉回族自治州"}]},{"sortLetters":"D","data":[{"id":"140200","name":"大同"},{"id":"210200","name":"大連"},{"id":"210600","name":"丹東"},{"id":"230600","name":"大慶"},{"id":"232700","name":"大興安嶺地區"},{"id":"370500","name":"東營"},{"id":"371400","name":"德州"},{"id":"441900","name":"東莞"},{"id":"442100","name":"東沙群島"},{"id":"460400","name":"儋州"},{"id":"469021","name":"定安縣"},{"id":"469007","name":"東方"},{"id":"510600","name":"德陽"},{"id":"511700","name":"達州"},{"id":"532900","name":"大理白族自治州"},{"id":"533100","name":"德宏傣族景頗族自治州"},{"id":"533400","name":"迪慶藏族自治州"},{"id":"621100","name":"定西"}]},{"sortLetters":"E","data":[{"id":"150600","name":"鄂爾多斯"},{"id":"420700","name":"鄂州"},{"id":"422800","name":"恩施土家族苗族自治州"}]},{"sortLetters":"F","data":[{"id":"210400","name":"撫順"},{"id":"210900","name":"阜新"},{"id":"341200","name":"阜陽"},{"id":"350100","name":"福州"},{"id":"350300","name":"莆田"},{"id":"361000","name":"撫州"},{"id":"440600","name":"佛山"},{"id":"450600","name":"防城港"}]},{"sortLetters":"G","data":[{"id":"360700","name":"贛州"},{"id":"440100","name":"廣州"},{"id":"450300","name":"桂林"},{"id":"450800","name":"貴港"},{"id":"510800","name":"廣元"},{"id":"511600","name":"廣安"},{"id":"513300","name":"甘孜藏族自治州"},{"id":"520100","name":"貴陽"},{"id":"623000","name":"甘南藏族自治州"},{"id":"632600","name":"果洛藏族自治州"},{"id":"640400","name":"固原"}]},{"sortLetters":"H","data":[{"id":"130400","name":"邯鄲"},{"id":"131100","name":"衡水"},{"id":"150100","name":"呼和浩特"},{"id":"150700","name":"呼倫貝爾"},{"id":"211400","name":"葫蘆島"},{"id":"230100","name":"哈爾濱"},{"id":"230400","name":"鶴崗"},{"id":"231100","name":"黑河"},{"id":"320800","name":"淮安"},{"id":"330100","name":"杭州"},{"id":"330500","name":"湖州"},{"id":"340100","name":"合肥"},{"id":"340400","name":"淮南"},{"id":"340600","name":"淮北"},{"id":"341000","name":"黃山"},{"id":"371700","name":"菏澤"},{"id":"410600","name":"鶴壁"},{"id":"420200","name":"黃石"},{"id":"421100","name":"黃岡"},{"id":"430400","name":"衡陽"},{"id":"431200","name":"懷化"},{"id":"441300","name":"惠州"},{"id":"441600","name":"河源"},{"id":"451100","name":"賀州"},{"id":"451200","name":"河池"},{"id":"460100","name":"海口"},{"id":"532500","name":"紅河哈尼族彝族自治州"},{"id":"610700","name":"漢中"},{"id":"630200","name":"海東"},{"id":"632200","name":"海北藏族自治州"},{"id":"632300","name":"黃南藏族自治州"},{"id":"632500","name":"海南藏族自治州"},{"id":"632800","name":"海西蒙古族藏族自治州"},{"id":"650500","name":"哈密"},{"id":"653200","name":"和田地區"}]},{"sortLetters":"J","data":[{"id":"140500","name":"晉城"},{"id":"140700","name":"晉中"},{"id":"210700","name":"錦州"},{"id":"220200","name":"吉林"},{"id":"230300","name":"雞西"},{"id":"230800","name":"佳木斯"},{"id":"330400","name":"嘉興"},{"id":"330700","name":"金華"},{"id":"360200","name":"景德鎮"},{"id":"360400","name":"九江"},{"id":"360800","name":"吉安"},{"id":"370100","name":"濟南"},{"id":"370800","name":"濟寧"},{"id":"410800","name":"焦作"},{"id":"419001","name":"濟源"},{"id":"420800","name":"荊門"},{"id":"421000","name":"荊州"},{"id":"440700","name":"江門"},{"id":"445200","name":"揭陽"},{"id":"620200","name":"嘉峪關"},{"id":"620300","name":"金昌"},{"id":"620900","name":"酒泉"}]},{"sortLetters":"K","data":[{"id":"410200","name":"開封"},{"id":"530100","name":"昆明"},{"id":"659008","name":"可克達拉"},{"id":"659009","name":"昆玉"},{"id":"650200","name":"克拉瑪依"},{"id":"653000","name":"克孜勒蘇柯爾克孜自治州"},{"id":"653100","name":"喀什地區"}]},{"sortLetters":"L","data":[{"id":"131000","name":"廊坊"},{"id":"141000","name":"臨汾"},{"id":"141100","name":"呂梁"},{"id":"211000","name":"遼陽"},{"id":"220400","name":"遼源"},{"id":"320700","name":"連云港"},{"id":"331100","name":"麗水"},{"id":"341500","name":"六安"},{"id":"350800","name":"龍巖"},{"id":"371200","name":"萊蕪"},{"id":"371300","name":"臨沂"},{"id":"371500","name":"聊城"},{"id":"410300","name":"洛陽"},{"id":"431300","name":"婁底"},{"id":"450200","name":"柳州"},{"id":"451300","name":"來賓"},{"id":"469027","name":"樂東黎族自治縣"},{"id":"469024","name":"臨高縣"},{"id":"469028","name":"陵水黎族自治縣"},{"id":"510500","name":"瀘州"},{"id":"511100","name":"樂山"},{"id":"513400","name":"涼山彝族自治州"},{"id":"520200","name":"六盤水"},{"id":"530700","name":"麗江"},{"id":"530900","name":"臨滄"},{"id":"540100","name":"拉薩"},{"id":"540400","name":"林芝"},{"id":"620100","name":"蘭州"},{"id":"621200","name":"隴南"},{"id":"622900","name":"臨夏回族自治州"}]},{"sortLetters":"M","data":[{"id":"231000","name":"牡丹江"},{"id":"340500","name":"馬鞍山"},{"id":"440900","name":"茂名"},{"id":"441400","name":"梅州"},{"id":"510700","name":"綿陽"},{"id":"511400","name":"眉山"}]},{"sortLetters":"N","data":[{"id":"320100","name":"南京"},{"id":"320600","name":"南通"},{"id":"330200","name":"寧波"},{"id":"350700","name":"南平"},{"id":"350900","name":"寧德"},{"id":"360100","name":"南昌"},{"id":"411300","name":"南陽"},{"id":"450100","name":"南寧"},{"id":"511000","name":"內江"},{"id":"511300","name":"南充"},{"id":"533300","name":"怒江傈僳族自治州"},{"id":"542400","name":"那曲地區"}]},{"sortLetters":"P","data":[{"id":"211100","name":"盤錦"},{"id":"360300","name":"萍鄉"},{"id":"410400","name":"平頂山"},{"id":"410900","name":"濮陽"},{"id":"510400","name":"攀枝花"},{"id":"530800","name":"普洱"},{"id":"620800","name":"平涼"}]},{"sortLetters":"Q","data":[{"id":"130300","name":"秦皇島"},{"id":"230200","name":"齊齊哈爾"},{"id":"230900","name":"七臺河"},{"id":"330800","name":"衢州"},{"id":"350500","name":"泉州"},{"id":"370200","name":"青島"},{"id":"429005","name":"潛江"},{"id":"441800","name":"清遠"},{"id":"450700","name":"欽州"},{"id":"469002","name":"瓊海"},{"id":"469030","name":"瓊中黎族苗族自治縣"},{"id":"522300","name":"黔西南布依族苗族自治州"},{"id":"522600","name":"黔東南苗族侗族自治州"},{"id":"522700","name":"黔南布依族苗族自治州"},{"id":"530300","name":"曲靖"},{"id":"621000","name":"慶陽"}]},{"sortLetters":"R","data":[{"id":"371100","name":"日照"},{"id":"540200","name":"日喀則"}]},{"sortLetters":"S","data":[{"id":"320500","name":"蘇州"},{"id":"130100","name":"石家莊"},{"id":"140600","name":"朔州"},{"id":"210100","name":"沈陽"},{"id":"220300","name":"四平"},{"id":"220700","name":"松原"},{"id":"230500","name":"雙鴨山"},{"id":"231200","name":"綏化"},{"id":"310100","name":"上海"},{"id":"321300","name":"宿遷"},{"id":"330600","name":"紹興"},{"id":"341300","name":"宿州"},{"id":"350200","name":"廈門"},{"id":"350400","name":"三明"},{"id":"361100","name":"上饒"},{"id":"411200","name":"三門峽"},{"id":"411400","name":"商丘"},{"id":"420300","name":"十堰"},{"id":"421300","name":"隨州"},{"id":"429021","name":"神農架林區"},{"id":"430500","name":"邵陽"},{"id":"440200","name":"韶關"},{"id":"440300","name":"深圳"},{"id":"440500","name":"汕頭"},{"id":"441500","name":"汕尾"},{"id":"460200","name":"三亞"},{"id":"460300","name":"三沙"},{"id":"510900","name":"遂寧"},{"id":"540500","name":"山南"},{"id":"611000","name":"商洛"},{"id":"640200","name":"石嘴山"},{"id":"659001","name":"石河子"},{"id":"659007","name":"雙河"}]},{"sortLetters":"T","data":[{"id":"120100","name":"天津"},{"id":"130200","name":"唐山"},{"id":"140100","name":"太原"},{"id":"150500","name":"通遼"},{"id":"211200","name":"鐵嶺"},{"id":"220500","name":"通化"},{"id":"321200","name":"泰州"},{"id":"331000","name":"臺州"},{"id":"340700","name":"銅陵"},{"id":"370900","name":"泰安"},{"id":"411100","name":"漯河"},{"id":"429006","name":"天門"},{"id":"469022","name":"屯昌縣"},{"id":"520600","name":"銅仁"},{"id":"610200","name":"銅川"},{"id":"620500","name":"天水"},{"id":"650400","name":"吐魯番"},{"id":"654200","name":"塔城地區"},{"id":"659006","name":"鐵門關"},{"id":"659003","name":"圖木舒克"}]},{"sortLetters":"W","data":[{"id":"150300","name":"烏海"},{"id":"150900","name":"烏蘭察布"},{"id":"320200","name":"無錫"},{"id":"330300","name":"溫州"},{"id":"340200","name":"蕪湖"},{"id":"370700","name":"濰坊"},{"id":"371000","name":"威海"},{"id":"420100","name":"武漢"},{"id":"450400","name":"梧州"},{"id":"469006","name":"萬寧"},{"id":"469005","name":"文昌"},{"id":"469001","name":"五指山"},{"id":"532600","name":"文山壯族苗族自治州"},{"id":"610500","name":"渭南"},{"id":"620600","name":"武威"},{"id":"640300","name":"吳忠"},{"id":"650100","name":"烏魯木齊"},{"id":"659004","name":"五家渠"}]},{"sortLetters":"X","data":[{"id":"130500","name":"邢臺"},{"id":"140900","name":"忻州"},{"id":"152200","name":"興安盟"},{"id":"152500","name":"錫林郭勒盟"},{"id":"320300","name":"徐州"},{"id":"341800","name":"宣城"},{"id":"360500","name":"新余"},{"id":"410700","name":"新鄉"},{"id":"411000","name":"許昌"},{"id":"411500","name":"信陽"},{"id":"420600","name":"襄陽"},{"id":"420900","name":"孝感"},{"id":"421200","name":"咸寧"},{"id":"429004","name":"仙桃"},{"id":"430300","name":"湘潭"},{"id":"433100","name":"湘西土家族苗族自治州"},{"id":"532800","name":"西雙版納傣族自治州"},{"id":"610100","name":"西安"},{"id":"610400","name":"咸陽"},{"id":"630100","name":"西寧"}]},{"sortLetters":"Y","data":[{"id":"140300","name":"陽泉"},{"id":"140800","name":"運城"},{"id":"210800","name":"營口"},{"id":"222400","name":"延邊朝鮮族自治州"},{"id":"230700","name":"伊春"},{"id":"320900","name":"鹽城"},{"id":"321000","name":"揚州"},{"id":"360600","name":"鷹潭"},{"id":"360900","name":"宜春"},{"id":"370600","name":"煙臺"},{"id":"420500","name":"宜昌"},{"id":"430600","name":"岳陽"},{"id":"430900","name":"益陽"},{"id":"431100","name":"永州"},{"id":"441700","name":"陽江"},{"id":"445300","name":"云浮"},{"id":"450900","name":"玉林"},{"id":"511500","name":"宜賓"},{"id":"511800","name":"雅安"},{"id":"530400","name":"玉溪"},{"id":"610600","name":"延安"},{"id":"610800","name":"榆林"},{"id":"632700","name":"玉樹藏族自治州"},{"id":"640100","name":"銀川"},{"id":"654000","name":"伊犁哈薩克自治州"}]},{"sortLetters":"Z","data":[{"id":"130700","name":"張家口"},{"id":"211300","name":"朝陽"},{"id":"321100","name":"鎮江"},{"id":"330900","name":"舟山"},{"id":"350600","name":"漳州"},{"id":"370300","name":"淄博"},{"id":"370400","name":"棗莊"},{"id":"410100","name":"鄭州"},{"id":"411600","name":"周口"},{"id":"411700","name":"駐馬店"},{"id":"430200","name":"株洲"},{"id":"430800","name":"張家界"},{"id":"440400","name":"珠海"},{"id":"440800","name":"湛江"},{"id":"441200","name":"肇慶"},{"id":"442000","name":"中山"},{"id":"500100","name":"重慶"},{"id":"500200","name":"重慶郊縣"},{"id":"510300","name":"自貢"},{"id":"512000","name":"資陽"},{"id":"520300","name":"遵義"},{"id":"530600","name":"昭通"},{"id":"620700","name":"張掖"},{"id":"640500","name":"中衛"}]}]?
打包下載地址:
https://files.cnblogs.com/files/wukong1688/CitySelect.zip
?
本博客地址:?wukong1688
本文原文地址:https://www.cnblogs.com/wukong1688/p/11155025.html
轉載請著名出處!謝謝~~
?
轉載于:https://www.cnblogs.com/wukong1688/p/11155025.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的[RN] 全国城市列表选择 (包含定位城市、热门城市、全国城市)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Luogu 1541 乌龟棋
- 下一篇: Sliverlight Slide 的左