Leaflet React在功能组件中获取地图实例

2024-01-27

我想要在地图外有一个按钮,将视图更改为另一个坐标。

有没有办法让mapContainer实例调用它们的函数?或者说如何实现这个功能呢?

我尝试使用 ref 来获取它,但它不起作用。 这是我当前的代码

const zoom = 13;

function Map({ regionCoord, regionName }) {

    const mapRef = useRef();

    function handleFlyToClick() {
      // This don't work
      // const map = mapRef.current.leafletElement 
      // map.flyTo(regionCoord, zoom)
    }

 return (   
        <React.Fragment>
            <Grid container >
                <Grid item xs={10}>
                    {regionCoord && <MapContainer
                        ref={mapRef}                     
                        center={[50,50]} 
                        zoom={zoom}                    
                        >
                        <TileLayer
                            attribution='&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
                            url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
                        />            
   
                        <Marker position={regionCoord}>
                          <Popup>{regionName}</Popup>
                        </Marker>        
                    </MapContainer>}                               
                </Grid>
                <Grid item xs={2}>
                    <button onClick={handleFlyToClick}>Fly To</button>
                </Grid>
            </Grid>
        </React.Fragment>  
    )
    
}

export default Map

我正在使用react-leaflet v3


您需要使用一个包含您的按钮的组件。要获取地图实例,请使用whenCreated的支柱MapContainer。我认为mapRef对于最新版本不再有效。

地图容器:

 const [map, setMap] = useState(null);

 <MapContainer
      center={[50, 50]}
      zoom={zoom}
      style={{ height: "90vh" }}
      whenCreated={setMap}
  >
...

</MapContainer>
<FlyToButton />  // use the button here outside of the MapContainer

....

创建带有按钮及其事件的组件

function FlyToButton() {
  const onClick = () => map.flyTo(regionCoord, zoom);
    
  return <button onClick={onClick}>Add marker on click</button>;
}

Demo https://codesandbox.io/s/react-leaflet-v3x-get-map-instance-in-functional-component-hn0x4?file=/src/Map.jsx:1198-1224

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Leaflet React在功能组件中获取地图实例 的相关文章

  • 是否可以在没有 Javascript(仅 CSS)的情况下执行相同的操作(悬停效果)?

    我正在尝试创建一个带有图标的按钮像这样 http jsfiddle net pRdMc HTML div div class icon div span Send Email span div CSS button width 270px
  • 使用 获取用于 javascript 的 RSA 密钥?

    我的 Web 项目需要一个 RSA 密钥对 虽然有一些库 但我认为依靠浏览器 为了安全性和速度 为我生成密钥是个好主意 是否可以使用注册机或其他浏览器 API 来执行此操作 我不知道如何从注册机获取密钥 它们似乎是在提交时生成的 但我不想将
  • JavaScript 中的“new”关键字是什么?

    The newJavaScript 中的关键字第一次遇到时可能会很混乱 因为人们倾向于认为 JavaScript 不是面向对象的编程语言 它是什么 它解决什么问题 什么时候合适 什么时候不合适 它做了 5 件事 它创建一个新对象 这个对象的
  • 如何在 R 中为传单中的数值变量设置不对称颜色渐变

    我想让传单调色板以零为中心 红白绿发散 我已经尝试过中所说的这个帖子 https stackoverflow com questions 29262824 r center color palette on 0 当我尝试手动创建颜色时 我得
  • Google Charts(AreaChart)如何检测缩放变化

    我正在画一个面积图 在覆盖层上有一些标记 我正在使用explorer选项 仅限水平 以便用户放大和缩小 问题是我找不到一种方法来通知缩放更改 以便有机会更新制造商位置 有一个图表范围变化事件 但它不是由 AreaChart 触发的 我尝试检
  • 将数组转换为具有默认值的对象的更简洁方法? (洛达什可用)

    我有一个数组 比如说 a b c 我想将其转换为一个对象 该对象以数组值作为键和我可以设置的默认值 所以如果默认值是true 我希望我的输出是 a true b true c true 下面的代码是否有更简洁的版本来实现此目的 var my
  • 在 IE10 中禁用捏合放大

    在 IE10 触摸模式下 我希望仅使页面的特定部分可缩放 其余的不应该 我找到了这个 http msdn microsoft com en US library ie hh772044 aspx http msdn microsoft co
  • 改进 D3 序列旭日示例

    This D3示例作为我的出发点 http bl ocks org kerryrodden 7090426 http bl ocks org kerryrodden 7090426 我想更改提供图表的数据 并且我做了以下新示例 http j
  • React router.push 和 router.replace 之间的区别?

    有什么区别React 路由器推送 and 路由器 替换 路由器历史记录就像一个stack of routes 当您使用router replace 您将覆盖堆栈的顶部 当使用router push 它在顶部添加了一条新路线stack 路由器
  • 在 HTML5 中将两个图像合并到一个画布上

    我正在使用 HTML5 canvas 元素 假设我有 2 个 ImageData 对象 我想将它们组合起来放在一张画布上 假设我不关心这些图像如何组合 两个 ImageData 对象具有完全相同的像素数和形状 组合两个图像的最佳方式是什么
  • 获得一次性绑定以适用于 ng-if

    这个问题已经被之前问过 https stackoverflow com questions 23969926 angular lazy one time binding for expressions 但我无法让该解决方案发挥作用 所以我想
  • 删除 Laravel Mix 中的临时文件

    我想在 laravel mix 构建期间或之后删除临时构建文件 这是我目前拥有的一些代码 但是del不工作 const mix require laravel mix const del require del compile sass i
  • HTML 和 JavaScript - 将滚动操作从一个元素传递到另一个元素

    假设我有两个 div div div div A scrollable list div 我想让它当光标停在里面时 control并且鼠标滚轮滚动 view将会滚动 无论如何要实现这一目标 好的 快速修复对我有用 即使固定 div 不可滚动
  • (0, eval) () 的作用是什么? [复制]

    这个问题在这里已经有答案了 以下内容来自这个问题 https stackoverflow com questions 14119988 return this 0 evalthis 14120023 14120023 function q
  • PhantomJS 网页内存消耗?

    是否有一种编程方式 因为我想在运行时自动执行 方式来查看网页在通过 PhantomJs 运行时使用了多少内存 我也在使用 casperjs 如果这有帮助的话 我已经搜索了很多但没有找到任何方法 PhantomJs 使用 QtWebKit 因
  • `ie9` - contenteditable false 在父级可编辑时不起作用

    我正在尝试制作内容可编辑和不可编辑的容器 用户可以通过 3 种方式使用它 他们可以将内容与non editable 他们可以将内容与editable 他们可以在不选择其中之一的情况下放置内容 可编辑 我正在努力实现以下目标 content
  • 父指令属性更改时子指令不会更新

    这是对这两个问题的后续 在父指令和子指令之间传递参数 https stackoverflow com questions 42814530 pass argument between parent and child directives
  • 如何修复nodejs Express服务器中的“MulterError:意外字段”?

    我正在设置一个服务器来从客户端上传 zip 文件 服务器运行express和multer来执行此操作 上传文件时 服务器抛出 MulterError 意外字段 错误 我无法弄清楚是什么导致了它 我尝试过使用 png 图像 效果很好 但对于
  • 如何从配置加载套接字 io 事件监听器? [复制]

    这个问题在这里已经有答案了 我有使用套接字io 的nodejs 应用程序 我将存储在 config routes js 中的所有事件侦听器 module exports routes auth login controller auth a
  • openssl_pkey_get_details($res) 不返回公共指数

    我在用着这个例子 https stackoverflow com a 12575951 2016196使用 php 生成的密钥进行 javascript 加密openssl图书馆 但是 details openssl pkey get de

随机推荐

  • ASP.NET MVC 会话、全局和缓存

    我有一个用普通 ASP NET 编写的应用程序 我想将其移植到 ASP NET MVC 然而 我对保存对象的正确位置感到困惑 我需要坚持有几个原因 我希望所有人都能拥有一个single数据库连接 包装在 存储库 或 管理器 样式对象中 每个
  • 获取第 3 方应用程序的清单文件

    This 允许您浏览应用程序的清单文件 它是如何做到的 我在操作系统的 API 中找不到任何用于获取另一个应用程序的清单文件的内容 首先 您可以获得应用程序列表 如下所示 PackageManager pm getActivity getP
  • jquery改变div文本

    div class widget style height 60px width 110px n div class widget head ui widget header style height 20px width 130px sp
  • 使用c++和qt时的重音问题

    我正在用西班牙语编写一个程序 我想告诉用户文件已加载 用西班牙语来说是 ui gt teLog gt append Se carg el archivo filename 然而 西班牙语部分的输出为 归档文件 我知道问题在于编码 我想我需要
  • 创建简单的自定义上下文菜单命令 - 如何使用右键单击的文件路径/名称来运行 VB 脚本?

    我下载了一个文件并想验证它的 MD5 校验和 7Zip 的文件上下文菜单输出不包含 MD5 校验和 因此我从 Windows 站点下载了 fciv exe 并将其复制到我的 System32 文件夹中 然后我陷入了尝试添加自定义上下文菜单项
  • 类似的 JSON 请求,但发送 null 对象

    我正在 ASP NET MVC4 上进行开发 我的代码中有两个提交 JSON 对象的 JSON 请求 其中一个工作正常 另一个由于某种原因传递了一个空值 有任何想法吗 注意 在这两种情况下 请求实际上都到达了预期的控制器 只是第二个传递的是
  • 在MySQL插入语句中使用php变量[重复]

    这个问题在这里已经有答案了 我正在使用以下语句 但不确定如何获取 variables正确地在声明中 mysql query INSERT INTO subscribers email referral id user id ip addre
  • Googlebots 忽略 robots.txt? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一个网站 根目录中有以下 robots txt User agent Disabled User agent Googlebot Disabled
  • Azure Web App不加载.json文件

    我的 Azure Web 应用程序有问题 因为它无法加载 json位于服务器上的文件 应用程序运行良好 直到需要从 json 文件加载数据 通过单击运行 javascript 代码 进行 XmlHttpRequest 调用 的按钮来触发该事
  • 使用 SecKeychainFindGenericPassword 访问 KeyChain 时偶尔出现 errSecAuthFailed (-25293)?

    我正在编写一个应用程序 将密码存储在钥匙串上 然后使用 SecKeychainFindGenericPassword 获取它们 该文件在 90 的情况下都有效 但每隔一段时间 对 SecKeychainFindGenericPassword
  • 从抽屉导航器导航到特定选项卡

    是否可以将选项卡导航器嵌套在抽屉导航器中 然后从抽屉导航到特定选项卡 考虑这个非常基本的设置 const PrimaryNav createBottomTabNavigator ScreenOne ScreenTwo export cons
  • pickerView 显示为问号而不是数据?

    我正在尝试向我的 iphone 应用程序添加一个 pickerview 但它不是显示数组中的字符串 而是显示问号 有谁知道为什么 在过去的一个小时里我一直在试图弄清楚 这是我包含 pickerview 的控制器的代码 class NewIs
  • 为什么 WCF 客户端没有收到 SOAP 错误作为FaultException?

    我正在使用 WCF 客户端来使用非 WCF SOAP 1 2 Web 服务 当收到如下所示的 SOAP 错误时 我收到的是 ProtocolException 而不是FaultException 通信绑定没有问题 请求正在成功处理 但我无法
  • 从命令行执行python程序,无需脚本文件

    我想在远程服务器上执行 python 程序 而不创建脚本 远程服务器不允许我在文件系统上的任何位置创建任何文件 python程序具有以下结构 尽管功能要复杂得多 def test2 print test2 def test func tes
  • 这个部门有什么问题吗? [复制]

    这个问题在这里已经有答案了 这是代码 class testsum public static void main String arg double sum 0 double fraction fraction 1 9 System out
  • 虚拟机 Ubuntu 上的 NASM:无法执行二进制文件 exec 格式错误

    组装简单的 64 位 hello world 程序后出现错误 我正在使用以下命令 nasm f elf64 hello asm o hello o successfull ld o hello o hello m elf x86 64 su
  • 如何在 do_deploy() 之后添加任务?

    我写了一个食谱 我想在之后执行任务do deploy inherit deploy do deploy echo do deploy has been called addtask deploy after do compile do af
  • SQL Server TOP 一旦找到足够的行就会停止处理吗?

    当您使用 SQL Server 时TOP查询中的子句 一旦 SQL Server 引擎有足够的行来满足条件 它是否会停止搜索行TOP X需要退货吗 考虑以下查询 假设 some text field 是唯一的并且未设置全文索引 SELECT
  • 将多个范围复制到数组中而不循环

    我想将数据从单独的范围复制到数组中而不循环 以下方法仅使用 rng1 中的数据填充数组 Dim rng1 As Range rng2 As Range rng3 As Range rngMerge As Range Dim tmpMatri
  • Leaflet React在功能组件中获取地图实例

    我想要在地图外有一个按钮 将视图更改为另一个坐标 有没有办法让mapContainer实例调用它们的函数 或者说如何实现这个功能呢 我尝试使用 ref 来获取它 但它不起作用 这是我当前的代码 const zoom 13 function