gpt4 book ai didi

javascript - 将 LeafletJS 与 ReactJS 一起使用时,图 block 排序不正确

转载 作者:行者123 更新时间:2023-11-30 00:10:59 26 4
gpt4 key购买 nike

我正在使用 LeafletJS 插件在 ReactJS 单页应用程序中显示整页 map 。我按照说明 here .但是,磁贴未按正确顺序显示。它们是随机排序的(?)。我发现了类似的问题here但在那种情况下,顺序是固定在页面刷新上的。这对我来说不是真的。我的代码是(不包括样板文件):

index.html

<!doctype html>
<html>
<head>
<link rel="stylesheet" href="stylesheets/atlas.css">
</head>
<body>
<div id="app">
Loading...
</div>
<script src="javascripts/atlas.js"></script>
</body>
</html>

index.js

render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('app')
)

App.jsx

import LiveMap from './LiveMap';
// App component
const App = () => (
<LiveMap />
)
export default App;

LiveMap.jsx

class LiveMap extends React.Component {
constructor(props) {
super(props);
}

render() {
return (
<div id='map'></div>
);
}

componentDidMount() {
let _map = this.map = L.map(ReactDOM.findDOMNode(this)).setView([-41.2858, 174.78682], 14);
L.tileLayer(
'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '&copy; <a href="http://openstreetmap.org">OpenStreetMap</a> Contributors',
maxZoom: 18,
}).addTo(_map);
}

componentWillUnmount() {...}

shouldComponentUpdate() {return false;}
};
export default LiveMap;

最佳答案

我很确定你的问题是当你的代码执行时元素还没有完全呈现,或者正如@ghybs 提到的那样,没有加载 Leaflet stylesheet .参见 this question ,尤其是第二个答案,它解决了这个问题:

One drawback of using componentDidUpdate, or componentDidMount is that they are actually executed before the dom elements are done being drawn, but after they've been passed from React to the browser's DOM.

解决方案

为了解决这个问题,您必须将 map 创建代码包装在 setTimeout 中,如下所示:

componentDidMount() {
let element = ReactDOM.findDOMNode(this)

setTimeout(() => {
this.map = new L.map(element, {
center: new L.LatLng(41.019829, 28.989864),
zoom: 14,
maxZoom: 18,
layers: new L.TileLayer('...')
}, 100)
})
}

我整理了一个 pen它说明了 React 组件内传单 map 的工作示例。还要确保您包含传单的样式表:

...
<head>
<link rel="stylesheet" href="stylesheets/atlas.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/leaflet.css">
</head>
...

我还建议使用我更新了 penref使用。您可以阅读更多引用文献 here .

相关问题

Good way to combine React and Leaflet

React after render

关于javascript - 将 LeafletJS 与 ReactJS 一起使用时,图 block 排序不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36515631/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com