【问题标题】:ReactJS with Leaflet: tiles not correctly displayed until page refresh带有 Leaflet 的 ReactJS:直到页面刷新才正确显示图块
【发布时间】:2016-04-06 05:08:31
【问题描述】:

我正在使用 Semantic UI 和 ReactJS 构建一个应用程序。我正在使用一个选项卡模块来包含我的地图,它使用 Leaflet Javascript 库来呈现地图。

问题是在调整页面大小之前,图块无法正确显示。

这是我尝试过的:

MapComponent = React.createClass({
  componentDidMount() {
    let map = L.map('map')
    L.tileLayer.provider('Thunderforest.Outdoors').addTo(map)
    map.setView([lat, long], zoom)
    map.invalidateSize(false)
  }
}

这似乎没有解决问题。

我尝试设置超时,如下所示:

MapComponent = React.createClass({
  componentDidMount() {
    let map = L.map('map')
    L.tileLayer.provider('Thunderforest.Outdoors').addTo(map)
    Meteor.setTimeout(() => {
      map.invalidateSize(false)
    }, 2000)
    map.setView([lat, long], zoom)
  }
})

有时将计时器设置为 2000 会起作用,但有时需要将其设置为 5000,这在我看来有点疯狂。

根据我的阅读,调用invalidateSize() 函数应该可以解决问题。任何解决此问题的帮助将不胜感激。谢谢。

【问题讨论】:

  • 你的标签显示/它的大小被计算出来之后,你会打电话给invalidateSize()吗?

标签: javascript meteor reactjs leaflet


【解决方案1】:

一旦包含您的地图的选项卡可见,请致电invalidateSize。在语义 UI 的选项卡模块中,您可以使用 onVisible 回调来做到这一点:

在标签可见后调用

http://semantic-ui.com/modules/tab.html#/settings

<div class="ui menu top">
    <a class="item" data-tab="map">Map</a>
</div>

$('.top.menu .item').tab({
    'onVisible': function () {
        // Do stuff
    }
});

【讨论】:

  • 假设每个选项卡都是它自己的 React 组件。如果我的菜单在一个组件中,而我的地图视图在另一个组件中,有没有一种方法可以调用该 jquery 函数?
  • 可以通过组件状态共享地图实例,看这个问答:stackoverflow.com/questions/34337330/…
猜你喜欢
  • 2022-01-21
  • 2019-07-12
  • 2014-11-13
  • 2017-10-14
  • 2019-11-22
  • 2021-09-23
  • 2019-05-15
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多