当前位置: 首页 > 知识库问答 >
问题:

在react-google-maps中动态添加、更新、删除标记

卫俊誉
2023-03-14
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import * as serviceWorker from './serviceWorker';
import { withScriptjs, withGoogleMap, GoogleMap, Marker } from "react-google-maps"


let markers = []

function createMarkers(numMarkers){

    for(let i = 0; i < numMarkers; i++){
        markers.push(<Marker key={i} position={{ lat: 45.123 + (i * 0.005), lng: -75.987 }} />)
    }

    return markers;
}

setInterval(function(){ 
  if(markers.length > 0 && markers[0].props.position){
    let marker = markers[0];
    //debugger;
    let position = marker.props.position;
    position.lat = position.lat - 0.005;
    position.lng = position.lng - 0.005;
    marker.props.position = position;
  }
}, 1000)

const MyGreatMap = withScriptjs( withGoogleMap(props => <GoogleMap
      defaultZoom={14}
      defaultCenter={{ lat: 45.123, lng: -75.978 }}
    >
      {createMarkers(10)}
    </GoogleMap>));


ReactDOM.render(
  <MyGreatMap 
    googleMapURL="https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=geometry,drawing,places&key=AIzaSyDS-TFZqRfUx9xPXTJrPH6eml-gGo-btZ0"
    loadingElement={<div style={{ height: `100%` }} />}
    containerElement={<div style={{ height: `800px` }} />}
    mapElement={<div style={{ height: `100%` }} />}
  />, 
  document.getElementById('root'));

共有1个答案

唐睿
2023-03-14

我确信这是错误的,它应该以某种方式更新状态,但标记中的LAT/LNG信息是道具。

没错,markers需要移动到本地状态,因此可以引入一个组件,该组件接受markers道具作为初始状态,然后状态更新如下:

class MapWithMarkers extends React.Component {
  constructor(props) {
    super(props);
    this.state= {markers: this.props.markers};   //1.initialize initial state from props
  }

  updateMarker() {
      this.setState(prevState => {
        const markers = [...prevState.markers];
        markers[index] = {lat: <val>, lng: <val>};
        return {markers};
     })
  }

  componentDidMount() {
    this.intervalId = setInterval(this.updateMarker.bind(this), 1000);
  }
  componentWillUnmount(){
    clearInterval(this.intervalId);
  }
  
  render() {
    return (
      <Map center={this.props.center} zoom={this.props.zoom} places={this.state.markers} />
    ); 
  }
}

演示

 类似资料:
  • 问题内容: 我正在使用NPM包创建Google Map和几个标记。 问题: 我们如何将默认的Google Maps标记添加到地图? 从这个Github问题来看,似乎我们需要使用onGoogleApiLoaded函数访问内部Google Maps API 。 参考Google Maps JS API文档中的示例 ,我们可以使用以下代码来呈现标记,但是如何定义对的引用? 当前代码: 问题答案: 从自述

  • 问题内容: 我不想要做的是在地图上显示从某些移动设备上选择的位置。有关位置的数据在那里。 我这里需要根据从服务器接收到的数据在地图上添加标记。 假设我已经将位置数据 ({Lat,Lang}) 设置为 状态标记, 然后如何添加它以显示在地图中。 我的地图代码如下! 使用过的npm包:-谷歌地图反应 问题答案: 您可以尝试: 如果有错误,也请在此处显示,我们稍后可以修复 =========== 标记点

  • 问题内容: 我正在尝试更新标记的位置,而不刷新整个页面。我尝试使用,但是我没有运气。 这是我到目前为止的代码。 提前致谢 这是我的JSON输出。 问题答案: 我建议使用setInterval而不是setTimeout。 这是一些代码,使用您提供的JSON并通过为每个标记添加必需的“ description”成员,在小提琴中通过JSON模拟更新:

  • 我正在创建一个加载地图 我有一个包含标记信息的对象,它也包含google maps标记对象。我的代码检测是否应根据边界框或缩放级别删除市场。我将marker对象设置为“setMap(null);”使用firebug,我可以看到它被设置了,然后我完全删除了父对象,并且对象数据长度得到了正确更新。 当一个标记被认为删除时,我将其输出到firebug控制台,似乎正在工作,并且我可以看到该标记没有从aja

  • 使用react-google-map与MarkerClub sterer,我如何添加和删除标记从地图/群集后,地图被安装,例如。 我尝试过简单地创建一个新标记,将map设置为refs.map 以及使用. addMarker()函数,该函数定义在用于react-google-map中的MarkerClub sterer中的mark er屋而立rplus中,但没有任何功能。 两者都返回错误。 基于以下

  • 问题内容: 我一直在 这里 找到有关Google Maps上的PHP / MYSQL教程。 我希望每5秒钟左右从数据库更新一次标记。 据我了解,我需要使用Ajax定期更新标记,但是我很难理解要在哪里添加函数以及在哪里使用 setTimeout() 等 我发现的所有其他示例并没有真正说明正在发生的事情,一些有用的指导会很棒! 这是我的代码(与Google示例相同,但有一些 var 更改): 我希望有