Javascript 无法从react google maps/api中的StandaloneSarchbox访问此.searchBox
我正在尝试访问Javascript 无法从react google maps/api中的StandaloneSarchbox访问此.searchBox,javascript,reactjs,google-maps,react-google-maps,Javascript,Reactjs,Google Maps,React Google Maps,我正在尝试访问getPlaces()函数,该函数应该位于resact google maps/api的standalonearchBox组件中。在和其他示例中,用户以这种方式使用它: 函数映射(){ //不起作用。 //错误->“this”隐式具有类型“any”,因为它没有类型 //注释.ts(2683) //tsx(22,10):“this”的外部值被此容器隐藏。 const onPlacesChanged=()=>console.log(this.searchBox.getPlaces())
getPlaces()
函数,该函数应该位于resact google maps/api
的standalonearchBox
组件中。在和其他示例中,用户以这种方式使用它:
函数映射(){
//不起作用。
//错误->“this”隐式具有类型“any”,因为它没有类型
//注释.ts(2683)
//tsx(22,10):“this”的外部值被此容器隐藏。
const onPlacesChanged=()=>console.log(this.searchBox.getPlaces());
返回(
{/*子组件,如标记、信息窗口等。*/}
)
}
我这样做是因为这是我在该函数中获取此的唯一方法:
/。。。照样
//也不起作用,这是一个奇怪的对象,其中不存在“搜索框”
函数onPlacesChanged(此:任意){
console.log(this.searchBox.getPlaces())
}
// ... 照样
但是从此
访问搜索框
属性时遇到问题。当我打印this
时,它会显示一个大的奇怪对象,其属性为`{e3:{…},gm_绑定:{…},gm_访问器{…}
以前有人遇到过这个问题吗
在中,函数onPlacesChanged
描述如下:
onPlacesChanged(()=>void)|未定义
描述:当用户选择查询时触发此事件,应使用getPlaces获取新位置。
以下是关于如何使代码正常工作的建议:
const[searchBox,setSearchBox]=useState(null)代码>
onLoad
道具调用一个函数,将SearchBox对象的ref置于SearchBox状态
onPlacesChanged
中,您只需登录searchBox.getPlaces()
即可获得getPlaces的结果
/*global google*/
import ReactDOM from 'react-dom';
import React, { useState } from 'react';
import {
GoogleMap,
StandaloneSearchBox,
LoadScript
} from '@react-google-maps/api';
const lib = ['places'];
const center = { lat: 40.756795, lng: -73.954298 };
function Map() {
const [searchBox, setSearchBox] = useState(null);
const onPlacesChanged = () => console.log(searchBox.getPlaces());
const onSBLoad = ref => {
setSearchBox(ref);
};
return (
<LoadScript
googleMapsApiKey="YOUR_KEY"
libraries={lib}
>
<GoogleMap
mapContainerStyle={{ height: '400px', width: '800px' }}
center={center}
zoom={12}
>
{/* Child components, such as markers, info windows, etc. */}
<>
<StandaloneSearchBox
onPlacesChanged={onPlacesChanged}
onLoad={onSBLoad}
>
<input
type="text"
placeholder="Customized your placeholder"
style={{
boxSizing: 'border-box',
border: `1px solid transparent`,
width: `270px`,
height: `40px`,
padding: `0 12px`,
borderRadius: `3px`,
boxShadow: `0 2px 6px rgba(0, 0, 0, 0.3)`,
fontSize: `14px`,
outline: `none`,
margin: 'center',
textOverflow: `ellipses`,
position: 'absolute',
top: '40px',
marginLeft: '50%'
}}
/>
</StandaloneSearchBox>
</>
</GoogleMap>
</LoadScript>
);
}
export default Map;
/*全球谷歌*/
从“react dom”导入react dom;
从“React”导入React,{useState};
进口{
谷歌地图,
Standalonesearch Box,
加载脚本
}来自“@react谷歌地图/api”;
常量lib=['places'];
施工中心={lat:40.756795,液化天然气:-73.954298};
函数映射(){
const[searchBox,setSearchBox]=useState(null);
const onPlacesChanged=()=>console.log(searchBox.getPlaces());
const onSBLoad=ref=>{
设置搜索框(参考);
};
返回(
{/*子组件,如标记、信息窗口等。*/}
);
}
导出默认地图;
是的,这很有效。谢谢