首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在React / google-maps-react组件上从Web API设置地图的初始中心

在React / google-maps-react组件上从Web API设置地图的初始中心
EN

Stack Overflow用户
提问于 2020-10-18 04:08:33
回答 1查看 441关注 0票数 0

我正在使用google-maps react库,并且有一个关于在组件加载时从Web API检索纬度/经度坐标以填充地图中心的问题。我能够看到使用console.log()语句成功地进行了Web API调用并返回了我期望的值,但是没有使用这些值更新地图。我怀疑这与时机有关,但我不确定问题出在哪里。

我在构造函数和componentDidMount()方法中尝试了以下代码。两者都可以检索值,但都不能通过刷新映射来工作。我想这是我对React的事件/状态处理的误解:

代码语言:javascript
复制
componentDidMount() {
    const initialBoundingBoxapiUrl = 'https://localhost:44395/api/User/abc';
    fetch(initialBoundingBoxapiUrl)
      .then((response) => response.json())
      .then((data) => {
        console.log('Data returned = ' + data);
        var values = data.split(',');

        // this.state.lat = values[0];
        // this.state.lng = values[1];

        this.setState({lat:  values[0]});
        this.setState({lng:  values[1]});
    });
  }

state = {
    lat: "40.0",
    lng: "-74.0"
  };

我尝试过直接更新状态值和使用setState()方法。

如果我手动设置"lat“和"lng”状态值,而不是尝试从构造函数或componentDidMount()中的fetch()方法填充它们,中心就会像我预期的那样更新。

我的组件如下所示:

代码语言:javascript
复制
  <Map 
    apiKey={'allworkandnoplaymakesscottadullboy'}
    google={this.props.google} 
    initialCenter={{
        lat: this.state.lat,
        lng: this.state.lng
      }}
    zoom={13}>

我的努力到哪里去了?

EN

回答 1

Stack Overflow用户

发布于 2020-12-29 14:59:14

看起来地图没有被更新到新中心状态的原因是因为您使用的是initialCenter参数,而不是center参数。如您所见,initialCenter只会在加载时设置地图的初始中心,这就是为什么它只返回中心状态的初始值。为此,可以在初始渲染后使用center参数重新渲染贴图。这些都是here提到的。

作为示例,您可以在更改componentDidMount中的中心状态值时使用initialCentercenter时看到以下示例代码。

CodeSnippet:

代码语言:javascript
复制
import React, { Component } from "react";
import { Map, GoogleApiWrapper } from "google-maps-react";

export class MapContainer extends Component {
  state = {
    center: {
      lat: 40.854885,
      lng: -88.081807
    }
  };

  componentDidMount() {
    let newLat = {
      lat: 0,
      lng: 0
    };
    this.setState({ center: newLat });
  }
  render() {
    if (!this.props.loaded) return <div>Loading...</div>;

    return (
      <div>
        <div>
          center value: {this.state.center.lat} , {this.state.center.lng}
        </div>
        <Map
          className="map"
          google={this.props.google}
          onClick={this.onMapClicked}
          center={this.state.center}
          style={{ height: "100%", position: "relative", width: "100%" }}
          zoom={8}
        />
      </div>
    );
  }
}
export default GoogleApiWrapper({
  apiKey: "API_KEY"
})(MapContainer);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64406837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档