反应:Google Places API/ Places 详细信息

Posted

技术标签:

【中文标题】反应:Google Places API/ Places 详细信息【英文标题】:React: Google Places API/ Places Details 【发布时间】:2017-12-30 05:41:47 【问题描述】:

我有以下代码,它基于 Google Places API 检索 Google Places 评论。我已经将逻辑合并为 React 生命周期组件。目前,我无法设置状态并正确绑定对象。我可以使用一些帮助来了解我的逻辑失败的地方。

export default class Reviews extends React.Component
constructor(props)
    super(props);
    this.state = 
      places: []
    
  


componentDidMount()


let map = new google.maps.Map(document.getElementById("map"), 
    center: lat:40.7575285, lng: -73.9884469
  );

  let service = new google.maps.places.PlacesService(map);

service.getDetails(
    placeId: 'ChIJAUKRDWz2wokRxngAavG2TD8'
  , function(place, status) 
    if (status === google.maps.places.PlacesServiceStatus.OK) 
      console.log(place.reviews);
      // Intended behavior is to set this.setState(places.place.reviews)
    
  )

render()
const  places  = this.state;
return(
  <div>
    <p>
      
        places.map((place) => 
          return <p>place.author_nameplace.ratingplace.text</p>
        )
      
    </p>
  </div>
  )
 

【问题讨论】:

* 预期行为是设置 this.setState(places:place.reviews) 【参考方案1】:

您不能在回调中以这种方式使用this。当函数在this 中调用时,this.setState(places.place.reviews) 不会指向您的对象。一种解决方案是使用=&gt; 函数表示法,它将在词法上绑定this

service.getDetails(
    placeId: 'ChIJAUKRDWz2wokRxngAavG2TD8'
, (place, status) => 
    if (status === google.maps.places.PlacesServiceStatus.OK) 
      console.log(place.reviews);
      this.setState(places: place.reviews)
    
  )

或者,您可以对this 进行新的引用,然后在函数中使用它。像

var that = this
...
that(places.place.reviews)

第一个选项更好,但需要一个可以使用 ES6 的环境。由于您使用let,您可能还好。

【讨论】:

谢谢马克!箭头函数确实有帮助,但是我仍然无法从位置对象返回值。【参考方案2】:

经过一些调整——我得到了代码!谢谢。

render()
const  places  = this.state;
return(
  <div>
    <p>
      
        places.map((place) => 
          if(place.rating >= 4)
            return <p key=place.author_name>place.author_nameplace.ratingplace.text</p>
          
        )
      
    </p>
  </div>
 )

【讨论】:

以上是关于反应:Google Places API/ Places 详细信息的主要内容,如果未能解决你的问题,请参考以下文章

google.maps.places.Autocomplete 语言输出

无法获得有关Google Places API的其他详细信息,例如'opening_hours'

新的 Google API 密钥“Google Maps API v3”不适用于 Google Places API?

Android Google Places API,getAutocompletePredictions 返回状态“PLACES_API_ACCESS_NOT_CONFIGURED”

使用 google-places-api 的简单 html 页面的 ApiNotActivatedMapError

javascript 获取当前地址 - Google Places API