javascript - 对象作为 React 子对象无效(找到 : [object Promise]) Google Maps

标签 javascript reactjs google-maps google-maps-api-3 es6-promise

我试图通过坐标数组进行映射,并在 Google map 中的每个坐标上放置一个标记,但出现此错误:

对象作为 React 子项无效(找到:[object Promise])。如果您打算呈现子项集合,请改用数组。

所以它返回一个 Promise 数组。我不确定如何让它返回实际值。

有人有什么想法吗?

代码如下:

import React, {Component} from "react";
import {Map, InfoWindow, Marker, GoogleApiWrapper} from "google-maps-react";
import Navbar from "./Navbar";
import {connect} from "react-redux";
import {getVacations} from "./redux";
import Geocode from "react-geocode";

class GoogleMaps extends Component {
    constructor(){
        super();

    }

       componentDidMount = () => {
           this.props.getVacations();
       }

       render() {
        console.log(this.props);

        const coordinates = this.props.vacations.map(coordinate => {
            const convert = Geocode.fromAddress(coordinate.location).then(response => {
                const lat = response.results[0].geometry.location.lat;
                const lng = response.results[0].geometry.location.lng;
                console.log(lat, lng);
                return <Marker key={coordinate._id} position={{lat: lat, lng: lng}} animation={2}/>
            })   
            console.log(convert);
            return convert;
         })


         return (
            <div>
                <Navbar/>
                <Map google={this.props.google} zoom={4}>
                    {coordinates}
                </Map>
            </div>
        )
       }
    }

    const connectVaca = connect(state => ({vacations: state}), {getVacations})(GoogleMaps);

export default GoogleApiWrapper({
    apiKey: "API KEY HERE"
})(connectVaca)

最佳答案

问题是坐标是一个Promise数组。在下面的声明中:

const convert = Geocode.fromAddress(coordinate.location)then(...)

您只需创建一个 promise 对象 convert 并在 map 中返回。您可以使用 Promise.all获取实际值并将结果放入状态。首先更改构造函数:

constructor(){
    super();
    this.state = { coords: [] }
}

获取所有 promise 的值:

const coordinates = this.props.vacations.map(coordinate => {
      const convert = Geocode.fromAddress(coordinate.location)
      return convert;
})

Promise.all(coordinates).then(values => {
  //Create your markers array here and put into state
  const markers = values.map(item => ... )
  this.setState({ coords: markers })
});

然后在返回的 jsx 对象中使用 this.state.coords

return (
    <div>
        <Navbar/>
        <Map google={this.props.google} zoom={4}>
            {this.state.coords}
        </Map>
    </div>
)

这应该有效。

关于javascript - 对象作为 React 子对象无效(找到 : [object Promise]) Google Maps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50999142/

相关文章:

javascript - 将 Google map 中的多边形边界居中

android - 从 Android 中的 Address/Location 对象获取街道名称

javascript - HTML5 中的 localStorage 是如何工作的?

javascript - 使用 javascript/jquery 单击下一个和上一个直到固定阶段来显示 div 或内容

javascript - 在 React 组件中检索自定义数据-* 属性值(无事件)

javascript - POST 请求后下载 CSV

javascript - 来自 CDN 的 Webpack、React-router 和 React

php - XMLHttpRequest 对象的打开方法的相对路径

javascript - 我应该将 ReactJS 组件的 onClick 逻辑放在什么位置?

javascript - 如何从 Google map (V3) LatLng 获取屏幕 XY?