gpt4 book ai didi

javascript - 结合 React 和 Leaflet 的好方法

转载 作者:IT王子 更新时间:2023-10-29 03:16:54 25 4
gpt4 key购买 nike

我正在做一个结合 React 和 Leaflet 的项目,但我必须说我在语义上遇到了一些困难。

由于大部分内容由 Leaflet 直接管理,我不知道将 Leaflet map 实例作为状态添加到 React 组件中是否有意义。

在使用 Leaflet 创建标记时出现同样的问题,因为它不返回任何东西,我真的没有任何东西可以渲染。逻辑本身对我来说似乎很模糊。

这是我开始做的。它工作正常,但我觉得我正在编写糟糕的代码并且缺少概念。

/** @jsx React.DOM */

/* DOING ALL THE REQUIRE */
var Utils = require('../core/utils.js');

var Livemap = React.createClass({
uid: function() {
var uid = 0;
return function(){
return uid++;
};
},
getInitialState: function() {
return {
uid: this.uid()
}
},
componentDidMount: function() {
var map = L.map('map-' + this.state.uid, {
minZoom: 2,
maxZoom: 20,
layers: [L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {attribution: '&copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>'})],
attributionControl: false,
});
map.fitWorld();
return this.setState({
map: map
});
},
render: function() {
return (
<div className='map' id={'map-'+this.state.uid}></div>
);
}
});

(function(){
Utils.documentReady(function(){
React.render(
<Livemap />,
document.body
)
});
})();

所以我的问题是:

  • 这个样本看起来合法吗?
  • 您将如何处理添加标记和管理其事件的逻辑?

最佳答案

  • 您不需要自己管理唯一性,即“UID”。相反,您可以使用 getDOMNode访问组件的真实节点。 Leaflet 的 API 支持字符串选择器或 HTMLElement 实例。
  • Leaflet 正在管理渲染,因此 map 不应存在于 state 上。仅将数据存储在影响 React 渲染 DOM 元素的 state 中。

除了这两点之外,正常使用 Leaflet API 并根据需要将 React 组件的回调绑定(bind)到 Leaflet map 。 React 在这一点上只是一个包装器。

import React from 'react';
import ReactDOM from 'react-dom';

class Livemap extends React.Component {

componentDidMount() {
var map = this.map = L.map(ReactDOM.findDOMNode(this), {
minZoom: 2,
maxZoom: 20,
layers: [
L.tileLayer(
'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
{attribution: '&copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>'})
],
attributionControl: false,
});

map.on('click', this.onMapClick);
map.fitWorld();
}

componentWillUnmount() {
this.map.off('click', this.onMapClick);
this.map = null;
}

onMapClick = () => {
// Do some wonderful map things...
}

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

}

关于javascript - 结合 React 和 Leaflet 的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26755251/

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