我正在尝试将MapBox-GL与React结合使用。我试图避免使用包装器。
我已经成功使用Class Components创建了映射,但想将其转换为仅使用函数来利用钩子。在函数中显示地图效果很好:
const map = () => {
new mapboxgl.Map({
container: 'mapContainer',
style: 'mapbox://styles/mapbox/light-v9',
center: [7.32, 60.44],
zoom: 6,
})
};
const Map = () => {
const style = {
position: 'absolute',
top: 0,
bottom: 0,
width: '100%',
height: '100vh'
};
useEffect(()=>{
map();
});
return (
<Row type="flex" gutter="50">
<Col xs={{ span: 18 }}>
<div style={style} id="mapContainer" />
</Col>
</Row>
);
}
但是,我想添加控制器并使用地图进行操作。我通常在ComponentDidMount()中执行此操作。
我尝试将map.addControl(geocoder);
添加到useEffect以及Map函数之外。我只有错误:
TypeError:map.addControl不是函数
答案 0 :(得分:2)
与componentDidMount
对应的是useEffect
,输入为零。
map.addControl(geocoder)
假定map
是Map
的实例,而它是一个函数,并且不返回值。
应为:
const getMap = () => {
return new mapboxgl.Map({ ... })
};
const Map = () => {
useEffect(()=>{
const map = getMap();
map.addControl(geocoder);
}, []);
...
};