开发者问题收集

未捕获的类型错误:无法读取与 Google 地图反应中的 null 属性“props”

2016-12-23
1675

我正在使用 google-maps-react 和 react 在地图上显示一些数据,现在我想要在单击或悬停标记时显示工具提示。为此,我认为我可以使用 google-maps-react 附带的“InfoWindown”组件,但它给了我一个错误“无法读取 null 的属性‘props’”。

这是我的代码..

import React, { Component } from 'react';
import Map, { Marker, InfoWindow } from 'google-maps-react';

export default class GoogleMap extends Component {
  constructor(props) {
    super(props);

    this.state = {
      showingInfoWindow: false,
      activeMarker: {},
      selectedPlace: {}
    };

    this.renderTrucks = this.renderTrucks.bind(this);
    this.onMarkerClick = this.onMarkerClick.bind(this);
  }

  onMarkerClick(props, marker, e) {
    this.setState({
      selectedPlace: props,
      activeMarker: marker
    });
  } 

  renderTrucks() { 
    if (this.props.list.length === 0) {
      return;
    }   
    return this.props.list.map((truckInfo) => {
      return (<Marker
        key={truckInfo.objectid}
        name={truckInfo.applicant}
        onClick={this.onMarkerClick}
        position={{lat:truckInfo.latitude, lng:truckInfo.longitude}} />
      );
    });
  }


  render() {
    return (
      <Map google={window.google}
        className={'map'}
        style={{width: '50%', height: '80%', position: 'relative'}}
        zoom={13}>
        {this.renderTrucks()}

        <InfoWindow
          marker={this.state.activeMarker}
          visible={this.state.showingInfoWindow}>
          <p>{this.state.selectedPlace.name}</p>
        </InfoWindow>        
      </Map>
    );
  }
}

我认为我的所有回调函数都很好,但在我看来,“InfoWindow”组件是给我带来麻烦的那个。有人知道如何使用这个东西吗?

谢谢,

1个回答

我假设问题出在 onClick={this.onMarkerClick 。回调中的 this 与外部不同。

使用以下代码设置标记的 onClick 属性时是否有效?

onClick={(props, marker, e) => this.onMarkerClick(props, marker, e)}

有关箭头函数的更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

An arrow function does not create its own this context, so this has the original meaning from the enclosing context.

nightlyop
2016-12-23