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在功能组件中获取地图实例 的相关文章

随机推荐

  • 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