React-Leaflet地图未正确显示。

83

我正在尝试使用react-leaflet来显示地图。我使用来自这个 fiddle的代码,它可以工作,但是在我的电脑上输出结果是这样的:

enter image description here

这是我的代码:

DeviceMap.js

import React from 'react'
import { Map, Marker, Popup, TileLayer } from 'react-leaflet';

export class DeviceMap extends React.Component {
  constructor() {
    super();
    this.state = {
      lat: 51.505,
      lng: -0.09,
      zoom: 13,
    };
  }

  render() {
    const position = [this.state.lat, this.state.lng];
    return (
      <Map center={position} zoom={this.state.zoom} scrollWheelZoom={false}>
        <TileLayer
          attribution='&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
          url='http://{s}.tile.osm.org/{z}/{x}/{y}.png'
        />
        <Marker position={position}>
          <Popup>
            <span>A pretty CSS3 popup. <br/> Easily customizable.</span>
          </Popup>
        </Marker>
      </Map>
    );
  }
}

export default DeviceMap

DeviceTabs.js

export class DeviceTabs extends React.Component {
  state = {
    index: 0
  };

  handleTabChange = (index) => {
    this.setState({ index })
  };

  render () {
    return (
      <Tabs index={this.state.index} onChange={this.handleTabChange}>
        <Tab label='Values'>
          <DeviceTable {...this.props} />
        </Tab>
        <Tab label='Map'>
          <div className={style.leaflet}>
            <DeviceMap />
          </div>
        </Tab>
      </Tabs>
    )
  }
}

style.scss

.leaflet {
  height: 300px;
  width: 100%;
}

控制台中没有错误,我不知道该在哪里搜索了。由于代码段可以正常工作,所以这不是一个 bug。我错过了什么吗?

->

控制台没有报错,但我不知道还有哪些地方可以检查。因为代码段能够正常运行,所以这不是一个 bug。我可能漏掉了什么?

18个回答

2
这解决了我的问题: 将这个添加到index.html中。
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/leaflet/1.3.1/leaflet.css">

<style>
  .leaflet-container {
   height: 400px;
   width: 800px;
 }
</style>

来源:https://medium.com/@eugenebelkovich/map-for-react-apps-with-leaflet-365f9df82d55

本文介绍了如何在React应用程序中使用Leaflet创建地图。 Leaflet是一个开源JavaScript库,可帮助我们轻松地创建交互式地图。步骤包括安装必要的软件包,设置组件和渲染地图。通过阅读本文,您将学习如何使用React和Leaflet创建自己的地图应用程序。

1
如果这些方法都不适用于您,您可以尝试在页面加载时手动调整窗口大小。
window.dispatchEvent(new Event('resize'));

1
根据我所做的搜索,对于这种情况,我得出结论首先应该设置我正在处理的部分的宽度。另一方面,在此之后,我可以访问DOM映射。我添加了100毫秒的延迟,之后进行初始设置并进行映射。

1
我不知道为什么,仅添加Leaflet的CSS文件还不够...
似乎你还需要添加:
.leaflet-container{
  height:500px;
}

1

只需从任何CDN中添加与您的版本类似的leaflet样式

<link rel="stylesheet" href="https://unpkg.com/leaflet@1.4.0/dist/leaflet.css" />

0
在Leaflet地图中,如果您的地图显示不正确,那么这个问题是由CSS文件引起的。
请在public/index.html中尝试使用以下CSS。
<link href='https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.0.3/leaflet.css' rel='stylesheet'>

0

即使设置了高度和CSS,我的地图仍然完全没有显示。 您需要将以下leaflet cdn和css添加到您的index.html文件中才能使其正常工作:

<link rel="stylesheet" 
href="//cdnjs.cloudflare.com/ajax/libs/leaflet/1.3.1/leaflet.css">    
<style>
     .leaflet-container {
       height: 500px;
       width: 960px;
     }    </style>

    <!-- Make sure you put this AFTER Leaflet's CSS -->
    <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"
      integrity="sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA=="
      crossorigin=""></script>
    <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />

0

试试这个:

 var mapid = $(this).find('[id^=leaflet-map]').attr('id');
      var map = settings.leaflet[mapid].lMap;
      map.invalidateSize();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接