react实现城市列表


前言

适用react实现的城市列表,具备吸顶和城市搜索定位等功能。


一、效果图

在这里插入图片描述

二、使用步骤

1.引入库

代码如下:

import React from "react";
import {
    connect } from 'dva';
import VerticaLayout from '@/pages/tags/verticaLayout';

import {
    Row, Col } from 'antd'
import CheckMenu from "@/utils/checkMenu"
import styles from './citySelect.less'

VerticaLayout请看我的另一篇博客。固定头部及解决转态栏遮挡问题

2.函数

1.getLocalCity

/**
 * 页面载入plus后的回调
 * @param {function} func 
 */
const plusReady = (func) => {
   
    if (window.plus) {
   
        func();
    } else {
   
        document.addEventListener('plusready', func, false);
    }
}
/**
 * 检查手机定位权限是否开启
 */
const getLocalCity = () => {
   //不能单独使用需注册plus或在手机中,检查定位权限状态
    return new Promise((resolve, reject) => {
   
         plusReady(function () {
   
            const pp = plus.navigator.checkPermission('LOCATION');
            switch (pp) {
   
                case 'authorized':
                    getLocationCity().then((res) => {
   
                        resolve(res)
                    })
                    // plus.nativeUI.alert('已开启定位权限');
                    break;
                case 'denied':
                    // plus.nativeUI.alert('已关闭定位权限');
                    openPermissionPos()

                    resolve({
   })
                    break;
                case 'undetermined':
                    openPermissionPos()
                    resolve({
   })
                    // plus.nativeUI.alert('未确定定位权限');
                    break;
                // case 'unknown':
                //     // plus.nativeUI.alert('无法查询定位权限');
                //     break;
                default:
                    // plus.nativeUI.alert('不支持定位权限');
                    Toast.info("请检查手机定位功能!" + pp)
                    getLocationCity().then((res) => {
   
                        resolve(res)
                    }).catch(e=>{
   
                        reject(e)
                    })
                    break;
            }

        })
    })


}

检查手机定位权限是否开启:其中getLocationCity为获取当前所在城市的方法。请自行实现

2.getSession

/**
 * 得到session中的原数据
 * @param {string} str json字符串
 * @param {*} default_ 在str为空时返回的默认数据
 * @returns {object} 
 */
export const getSession = (str, default_ = {
   }) => {
   //从对象中得到session中的原数据
    if (str) {
   
        return JSON.parse(str)
    }
   
    return default_
    
    
}

sesion值不存在则返回默认值

3、输入数据

1.数据结构

const citySelected = [
    {
   
        title: "当前城市",
        value: "current",
        multiSelect: false,//d单选
        default:"定位失败",
        children: []
    },
    {
   
        title: "历史记录",
        value: "history",
        multiSelect: false,
        default:"",
        children: []
    },
    {
   
        title: "热门城市",
        value: "popular",
        multiSelect: false,
        default:"",
        children:  [
            {
   
                value: '北京市',
                label:'北京市',
                selected: false,
            
            },
            {
   
                value: '昆明市',
                label: '昆明市',
                selected: false,
               
            },
            {
   
                value: '济南市',
                label: '济南市',
                selected: false,
                
            },
            {
   
                value: '天津市',
                label: '天津市',
                selected: false,
                
            }
        ],
    },
    
]

2、城市数据

通过调用getListData方法设置state里的cityList值,从而渲染城市列表。

// 获取城市数据并对其格式化
    getListData = () => {
   
        return new Promise((resolve, rejects) => {
   
            const {
    dispatch } = this.props;

            dispatch({
   
                type: 'utils/findCityDict',

            }).then(() => {
   
                const {
    cityList } = this.props.utils
                const temp = []
                Object.keys(cityList).forEach((item, index) => {
   
                    const data = []
                    cityList[item].forEach(jj => {
   
                        // 格式化城市数据
                        data.push({
    
                        label: jj.cityName ,
                        provinces:[jj.provinceName,jj.cityName]});
                    });
                    temp.push({
   
                        header: item,
                        'data': data
                    })
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Native中获取城市列表的方式可以有多种,以下是其中一种方法: 1. 使用开放的城市数据API:你可以使用一些开放的城市数据API来获取城市列表信息。这些API通常提供了城市名称、城市ID、城市拼音等信息。 以下是一个使用高德地图开放平台API获取城市列表的示例代码: ```javascript import React, { useEffect, useState } from 'react'; import { View, Text } from 'react-native'; import axios from 'axios'; const CityList = () => { const [cityList, setCityList] = useState([]); useEffect(() => { const fetchCityList = async () => { try { const response = await axios.get('https://restapi.amap.com/v3/config/district', { params: { key: 'YOUR_AMAP_API_KEY', keywords: '', subdistrict: 1, extensions: 'base', }, }); const cityData = response.data.districts[0].districts; setCityList(cityData); } catch (error) { console.error('获取城市列表数据失败', error); } }; fetchCityList(); }, []); return ( <View> <Text>城市列表:</Text> {cityList.map((city) => ( <Text key={city.adcode}>{city.name}</Text> ))} </View> ); }; export default CityList; ``` 在上述代码中,我们使用了高德地图开放平台的API来获取城市列表数据。需要替换`YOUR_AMAP_API_KEY`为你自己的API密钥。通过调用API获取的城市数据保存在`cityList`状态中,并在组件渲染时显示城市列表。 请注意,上述示例代码中的API地址和参数仅为示意,实际应根据具体的城市数据API进行调整。另外,还需要根据你的项目需求进行适当的错误处理和数据处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值