Mapbox React Examples 基础篇:用 useRef + useEffect 两步法在 React 中正确初始化并销毁 Mapbox 地图
Mapbox React Examples 基础篇用 useRef useEffect 两步法在 React 中正确初始化并销毁 Mapbox 地图【免费下载链接】mapbox-react-examplesExample patterns for building React apps with Mapbox GL JS项目地址: https://gitcode.com/gh_mirrors/ma/mapbox-react-examplesMapbox React Examples 是 Mapbox 官方开源的 React 地图应用示例库教你用 Mapbox GL JS 构建 React 地图应用。本文以其中的 basic 基础示例为主线带你用 useRef useEffect 正确完成地图的初始化与销毁一次讲透 React 中挂载 Mapbox 地图的核心模式。准备工作获取 Mapbox Access Token 并克隆示例在写任何代码之前你需要两样东西Access Token访问令牌Mapbox 的钥匙所有地图请求都靠它鉴权basic 示例代码本仓库中最精简、最适合入门的地图示例。克隆仓库并进入基础示例目录git clone https://gitcode.com/gh_mirrors/ma/mapbox-react-examples cd mapbox-react-examples/basic npm install npm start启动后访问 http://localhost:3000/ 即可看到一张可拖拽、可缩放的地图 ️。⚠️ 记得把 Access Token 替换成自己的。Token 配置位置在 Map.js 顶部mapboxgl.accessToken 你的_API_KEY_填在这里;各示例的运行说明可参考 basic/README.md依赖版本mapbox-gl 2.x React 18见 package.json。核心模式useRef 拿到容器useEffect 里建图这是 React 集成 Mapbox 地图最关键的一段代码完整逻辑在 Map.js 中。我们拆开看第 1 步用 useRef 拿到地图容器 DOMMapbox 地图是命令式的它必须先挂到一个真实的 DOM 节点上。useRef(null)创建的引用不会触发重渲染正好用来稳稳地握住这个 DOM 节点const mapContainerRef useRef(null); // ... div classNamemap-container ref{mapContainerRef} /第 2 步在 useEffect 中初始化地图useEffect空依赖数组[]保证地图只在组件挂载时创建一次正好对应初始化这个动作useEffect(() { const map new mapboxgl.Map({ container: mapContainerRef.current, // 第 1 步的容器 style: mapbox://styles/mapbox/streets-v11, center: [lng, lat], zoom: zoom }); // 添加右上角的 /- 缩放导航控件 map.addControl(new mapboxgl.NavigationControl(), top-right); // 地图移动时把中心坐标和缩放级别同步回 React 状态 map.on(move, () { setLng(map.getCenter().lng.toFixed(4)); setLat(map.getCenter().lat.toFixed(4)); setZoom(map.getZoom().toFixed(2)); }); // 关键组件卸载时销毁地图 return () map.remove(); }, []);第 3 步用 cleanup 函数销毁地图return () map.remove()是很多人忽略却最致命的一行。React 18 的 StrictMode 下 effect 会挂载 → 卸载 → 再挂载如果不调用map.remove()就会出现同一容器里叠加多张地图画面花屏WebGL 上下文泄漏页面越来越卡控制台报A map is already initialized之类的错误。 一句话记忆谁创建谁销毁。useEffect 创建地图useEffect 的清理函数销毁地图。为什么不能直接在 JSX 或组件函数体里 new 地图新手最容易踩的坑错误写法后果在组件函数体里直接new mapboxgl.Map()每次渲染都新建一张地图性能灾难在 JSX 的ref回调或render里初始化同左且容器可能尚未就绪只初始化、不remove()内存泄漏 重复初始化报错依赖useState的初始值渲染地图状态更新后地图不会自动跟随正确姿势始终是DOM 由 ref 提供生命周期交给 useEffect——这正是 Map.js 展示的模式。应用入口同样遵循 React 18 的标准写法通过createRoot挂载并开启 StrictMode见 index.js这也正是必须写销毁逻辑的原因。进阶地图移动数据如何流回 Reactbasic 示例还有一个精妙之处地图移动时通过move事件把经纬度、缩放级别写回 React state再渲染到左上角的侧边栏。也就是说数据是双向的React → 地图state 提供初始center/zoom地图 → Reactmove事件更新 state侧边栏实时显示。侧边栏样式定义在 Map.css注意.map-container使用position: absolute铺满全屏——这是地图容器常见的 CSS 处理方式新手容易漏掉导致地图高度为 0。跑通基础篇之后仓库里还有哪些示例可练手basic 只是起点同一套useRef useEffect 销毁模式贯穿所有示例建议按此顺序进阶示例目录练手内容markers-default用 GeoJSON 数据批量添加默认标记点markers-custom自定义样式的标记点markers-symbol用符号图层Symbol Layer画标记data-overlay数据图层叠加与交互data-overlay-redux地图状态接入 Redux 管理react-tooltip用 React 组件做地图提示框总结三步搞定 Mapbox React 地图初始化useRef 接容器ref{mapContainerRef}给地图一个落点useEffect 建地图空依赖数组保证只初始化一次cleanup 里 map.remove()组件卸载即销毁杜绝内存泄漏。把这个模式吃透再看仓库里标记点、数据叠加、Redux 集成等进阶示例都会发现它们只是在这套骨架上做延伸。动手跑一遍 basic 示例是你掌握 React Mapbox 地图最快的路径 。【免费下载链接】mapbox-react-examplesExample patterns for building React apps with Mapbox GL JS项目地址: https://gitcode.com/gh_mirrors/ma/mapbox-react-examples创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

告别手写正则删注释:为什么strip-json-comments才是处理JSONC的唯一正确选择

告别手写正则删注释:为什么strip-json-comments才是处理JSONC的唯一正确选择

告别手写正则删注释:为什么strip-json-comments才是处理JSONC的唯一正确选择 【免费下载链接】strip-json-comments Strip comments from JSON. Lets you use comments in your JSON files! 项目地址: https://gitcode.com/gh_mirrors/st/strip-json-comments strip-jso…

2026/8/25 10:41:46 阅读更多 →
动态规划与高精度算法实战:乘积最大问题解析

动态规划与高精度算法实战:乘积最大问题解析

1. 项目概述与问题拆解“乘积最大”这个问题,乍一看像是一个简单的数学游戏,但它在NOIP2000提高组中出现,就注定不是一个能靠直觉轻松解决的问题。题目核心是:给定一个长度为N的数字串,要求你插入K个乘号,将…

2026/8/25 10:41:46 阅读更多 →
从阿里腾讯小米的Claw生态看技术选型:微服务、云原生与IoT开发路径解析

从阿里腾讯小米的Claw生态看技术选型:微服务、云原生与IoT开发路径解析

1. 从“小龙虾”到“Claw”:一场命名狂欢背后的技术选型迷思最近在技术社区和社交媒体上,一个词火了——“Claw”。如果你以为这是哪个新出的开源框架或者编程语言,那可就错了。这个词,正以一种意想不到的方式,和国内几…

2026/8/25 10:41:46 阅读更多 →

最新新闻

临床AI多智能体系统安全风险剖析与加固实践

临床AI多智能体系统安全风险剖析与加固实践

在临床AI的落地浪潮中,多智能体(Multi-Agent)系统因其能模拟专家会诊、协同处理复杂诊疗任务而备受瞩目。然而,近期一系列实验和案例揭示了一个令人警醒的现象:一个看似微小的错误,例如一个被污染的提示词&…

2026/8/25 12:02:44 阅读更多 →
如何解决ES深度分页

如何解决ES深度分页

在Elasticsearch中,深度分页指的是请求靠后的页码(如第1000页,每页20条)时,性能急剧下降甚至内存溢出的问题。面试官期望你理解ES分页原理,并给出合理的解决方案。一、为什么深度分页慢? ES默认…

2026/8/25 12:02:44 阅读更多 →
Capture软件原理图输出各类PCB网表笔记

Capture软件原理图输出各类PCB网表笔记

Capture软件原理图输出各类PCB网表笔记前言一、 两种网表模式的核心区别二、 第一方网表(PCB Editor)导出全流程2.1 参数配置2.2 执行导出2.3 输出文件识别2.4 自定义输出路径三、 第三方网表(Other)导出与字符陷阱3.1 适用场景3.…

2026/8/25 12:01:43 阅读更多 →
Java只配了-Xmx4g,进程为什么吃掉8GB?

Java只配了-Xmx4g,进程为什么吃掉8GB?

Java只配了-Xmx4g,进程为什么吃掉8GB? 服务器只有8GB内存,Java启动参数明明写着: -Xms4g -Xmx4g 监控里的老年代也只用了55%。 但Java进程的RSS一路涨到7.6GB,最后被系统直接杀掉。 应用日志里没有: java.…

2026/8/25 12:01:43 阅读更多 →
股票回购数据追踪分析:用Python构建回购信号筛选与效果评估系统 IG50免费开源股票数据API接口

股票回购数据追踪分析:用Python构建回购信号筛选与效果评估系统 IG50免费开源股票数据API接口

股票回购数据追踪分析:用Python构建回购信号筛选与效果评估系统 股票回购是上市公司用自有资金买回自家股票的行为,理论上是利好信号。但不同回购的含金量差异很大,去年我搭建了一个回购数据追踪系统,用Python从公告数据、财务数…

2026/8/25 12:01:43 阅读更多 →
指数增强策略实现:用Python构建alpha因子选股与超额收益系统 IG50免费开源股票数据API接口

指数增强策略实现:用Python构建alpha因子选股与超额收益系统 IG50免费开源股票数据API接口

指数增强策略实现:用Python构建alpha因子选股与超额收益系统 指数增强策略是介于被动指数基金和主动选股之间的投资方式——在跟踪基准指数的基础上,通过因子选股获取超额收益。去年我用Python实现了一个基于多因子的指数增强系统,在沪深300…

2026/8/25 12:01:43 阅读更多 →

日新闻

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/25 0:00:34 阅读更多 →
Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

2026/8/25 0:00:34 阅读更多 →
数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

1. 项目概述:从“会做”到“会写”的竞赛核心跃迁“全国大学生数学建模竞赛”,这个名字对理工科学生来说,分量极重。每年,无数团队在三天三夜的时间里,为一个开放性问题绞尽脑汁,从建立模型、求解算法到编程…

2026/8/25 0:00:34 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/24 20:22:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/25 10:31:12 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →