react-amap 这是一个基于 React 封装的高德地图组件,帮助你轻松的接入地图到 React 项目中。

文档实例预览: Github Web | Gitee Web

特性

  • ️ 自动加载高德地图 SDK(通过创建 Script 标签的形式加载),包括第三方 SDK。
  • 使用 Typescript 编写,集成高德地图 SDK @type 声明文件(包括中文注释)。
  • ⚛️ 支持 React Hook 新增特性(需要 React 16.8+)。
  • 不依赖任何第三方组件。

安装

不依赖 uiw 组件库

  1. npm install @uiw/react-amap --save

使用

  1. import { Map, APILoader } from '@uiw/react-amap';
  2. const Demo = () => (
  3. <div style={{ width: '100%', height: '300px' }}>
  4. <APILoader akay="a7a90e05a37d3f6bf76d4a9032fc9129">
  5. <Map />
  6. </APILoader>
  7. </div>
  8. );
  9. ReactDOM.render(<Demo />, _mount_);

Map 组件

Map 组件是其他组件的基础,Map 组件会给所有的子组件注入两个属性 mapcontainerAMap

️ 注意

  1. 组件 <Map> 必须包裹在 <APILoader> 组件内,该组件作用是加载高德地图 SDK。
  2. 其他地图组件必须作为 <Map> 的子组件使用;
  1. import { Map, APILoader } from '@uiw/react-amap';

基本用法

Map 的父组件必须具有宽度和高度;

  1. import React from 'react';
  2. import { Map, APILoader } from '@uiw/react-amap';
  3. const Demo = () => (
  4. <div style={{ width: '100%', height: '300px' }}>
  5. <APILoader akay="a7a90e05a37d3f6bf76d4a9032fc9129">
  6. <Map />
  7. </APILoader>
  8. </div>
  9. );
  10. ReactDOM.render(<Demo />, _mount_);

参数设置

  1. import React, { Fragment } from 'react';
  2. import { Map, APILoader } from '@uiw/react-amap';
  3. function Demo() {
  4. const [dragEnable, setDragEnable] = useState(true);
  5. const [display, setDisplay] = useState(true);
  6. const [zoom, setZoom] = useState(15);
  7. const [viewMode, setViewMode] = useState('3D');
  8. return (
  9. <Fragment>
  10. <button onClick={() => setDragEnable(!dragEnable)}>{dragEnable ? '禁用' : '启用'}拖拽</button>
  11. <button onClick={() => setDisplay(!display)}>{display ? '卸载' : '加载'}地图</button>
  12. <button onClick={() => setViewMode(viewMode === '3D' ? '2D' : '3D')}>{viewMode}地图</button>
  13. <button onClick={() => setZoom(zoom + 1)}>放大 +1 -> ({zoom})</button>
  14. <button onClick={() => setZoom(zoom - 1)}>缩小 -1 -> ({zoom})</button>
  15. <div style={{ width: '100%', height: 350 }}>
  16. {display && (
  17. <Map
  18. dragEnable={dragEnable}
  19. zoom={zoom}
  20. viewMode={viewMode}
  21. pitch={viewMode === '2D' ? 0 : 70}
  22. />
  23. )}
  24. </div>
  25. </Fragment>
  26. );
  27. }
  28. ReactDOM.render((
  29. <APILoader akay="a7a90e05a37d3f6bf76d4a9032fc9129">
  30. <Demo />
  31. </APILoader>
  32. ), _mount_);

Ref

获取地图实例对象。

  1. import React, { useEffect, useRef, Fragment } from 'react';
  2. import { Map, APILoader } from '@uiw/react-amap';
  3. function Demo() {
  4. const mapRef = useRef();
  5. useEffect(() => {
  6. console.log('mapRef:', mapRef)
  7. }, []);
  8. return (
  9. <div style={{ width: '100%', height: 330 }}>
  10. <Map
  11. layers={[new AMap.TileLayer.Satellite()]}
  12. ref={(instance) => {
  13. if (instance && instance.map) {
  14. const bounds = instance.map.getBounds();
  15. console.log('instance', instance);
  16. }
  17. }}
  18. />
  19. <Map
  20. layers={[new AMap.TileLayer.Satellite()]}
  21. ref={mapRef}
  22. />
  23. </div>
  24. );
  25. }
  26. ReactDOM.render((
  27. <APILoader akay="a7a90e05a37d3f6bf76d4a9032fc9129">
  28. <Demo />
  29. </APILoader>
  30. ), _mount_);

事件触发

  1. import React from 'react';
  2. import { Map, APILoader } from '@uiw/react-amap';
  3. const Demo = () => (
  4. <div style={{ width: '100%', height: '300px' }}>
  5. <APILoader akay="a7a90e05a37d3f6bf76d4a9032fc9129">
  6. <Map
  7. onComplete={(data, de) => {
  8. console.log('地图加载完成!', data, de);
  9. }}
  10. onClick={() => {
  11. console.log('点击事件!');
  12. }}
  13. />
  14. </APILoader>
  15. </div>
  16. );
  17. ReactDOM.render(<Demo />, _mount_);

基于 React 封装的高德地图组件,帮助你轻松的接入地图到 React 项目中。的更多相关文章

  1. Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图

      标签: Android百度地图API Key  分类: Android 百度地图开发(2)    最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地 ...

  2. 基于ElementUI封装Excel数据导入组件

    由于前端项目使用的是Vue-cli3.0 + TypeScript的架构,所以该组件也是基于ts语法封装的,组件的完整代码如下: <template> <div id="m ...

  3. 基于element-ui封装一个Table模板组件

    大家在做后台管理系统的时候,写的最多的可能就是表格页面了,一般分三部分:搜索功能区.表格内容区和分页器区.一般这些功能都是使用第三方组件库实现,比如说element-ui,或者vuetify.这两个组 ...

  4. 基于taro封装底下浮动弹窗组件

    先看效果图: jsx: import Taro, { Component } from '@tarojs/taro' import { View, Image } from '@tarojs/comp ...

  5. AngularJS指令封装高德地图组件

    1 概述 公司移动门户原来是基于AngularJS指令封装的百度地图组件,用于签到.签退.定位等功能,在使用过程中发现百度地图频繁的弹出广告,所以打算重新引用其它地图组件,最后决定基于AngularJ ...

  6. 基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件

    目录 1. 前言 2. 关于vue-simple-uploader 3. 基于vue-simple-uploader封装全局上传组件 4. 文件上传流程概览 5. 文件分片 6. MD5的计算过程 7 ...

  7. 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入

    在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...

  8. vue-amap | 基于 Vue 2.x 与高德的地图组件

    vue-amap | 基于 Vue 2.x 与高德的地图组件 参考:https://elemefe.github.io/vue-amap/#/

  9. 如何基于 React 封装一个组件

    如何基于 React 封装一个组件 前言 很多小伙伴在第一次尝试封装组件时会和我一样碰到许多问题,比如人家的组件会有 color 属性,我们在使用组件时传入组件文档中说明的属性值如 primary , ...

随机推荐

  1. CSS布局中浮动问题的四种解决方案

    一.起因: 子盒子设置浮动之后效果: 由此可见,蓝色的盒子设置浮动之后,因为脱离了标准文档流,它撑不起父盒子的高度,导致父盒子高度塌陷.如果网页中出现了这种问题,会导致我们整个网页的布局紊乱 二.解决 ...

  2. Promise对象入门

    简介 promise对象可以获取异步操作的消息,提供统一的API,各个异步操作都可以用同样的方法进行处理. promise对象不受外界影响,其有三种状态:pending(进行中).fulfilled( ...

  3. HttpServletRespnse 对象 相关基本应用

    HttpServletRespnse 对象相关基本应用 向浏览器输出数据 getOutputStream() @Override protected void service(HttpServletR ...

  4. 【Android】listview 嵌套gridview报错,代码:”during second layout pass: posting in next frame

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985, QQ986945193 公众号:程序员小冰 说明:本人曾经在listview嵌套gridview出现 ...

  5. Collection/Map关系图

  6. Sorting It All Out (拓扑排序+思维)

    An ascending sorted sequence of distinct values is one in which some form of a less-than operator is ...

  7. 2 http

    response.write(string|buffer)可以调用0-n次 response.end(string|buffer) 方法.必须调用一次  response.setHeader('Con ...

  8. 01 fs模块

    1 fs.readFile 异步执行函数 /** fs 读取文件相对路径是相对终端命令行所在的路径 process.cwd()返回终端命令行的绝对路径 * */ fs = require('fs') ...

  9. Agumaster页面样式就绪

  10. Maven是什么? Maven的概念+作用+仓库的介绍+常用命令

    Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型.一组标准集合,一个依赖管理系统.和用来运行定义在生命周期阶段中插件目标和逻辑. 核心功能 Maven的核心 ...