【发布时间】:2020-02-20 14:50:36
【问题描述】:
看了mapbox documentation之后,写了这个组件
import React from "react";
import mapboxgl from "mapbox-gl";
import "./Map.css";
mapboxgl.accessToken = "...";
type Props = {
longitude: number;
latitude: number;
};
class Map extends React.Component<Props> {
private mapContainer: any;
private map: any;
componentDidMount(): void {
this.map = new mapboxgl.Map({
container: this.mapContainer,
center: [this.props.longitude, this.props.latitude],
style: "....",
zoom: 13
});
}
render(): JSX.Element {
return (
<div
ref={(el): void => {
this.mapContainer = el;
}}
className="mapContainer"
/>
);
}
}
export default Map;
此代码可以正常工作,但是,在我的实际项目中,我们使用的是 TypeScript。我不想将any 用于mapContainer 和map。
我已将"@types/mapbox-gl": "^1.7.0", 导入到我的项目中,但我不知道我必须在这里使用什么类型。
到目前为止我的尝试:
-
private map:mapboxgl.Map。这似乎是正确的,但后来它抱怨,因为它没有在构造函数上初始化。根据 mapbox 文档,它必须在componentDidMount上初始化。我可以用mapboxgl.Map | null输入变量。但后来我必须检查 constally 不为空,删除 一些烦人的警告。 -
private mapContainer = React.userRef<HtmlElement>(null);。但是,当我尝试初始化地图时,它显示 Type'RefObject<HTMLElement>' is not assignable to type 'string | HTMLElement'.
有什么想法吗?
【问题讨论】:
-
对于
this.map,使用:this.map: Map,通过为mapContainer 导入import { Map } from "@types/mapbox-gl",您可以尝试使用HtmlElement而不是HtmlDivElement -
HtmlElement似乎是正确的,但是当我尝试初始化地图时它会抱怨。
标签: reactjs typescript mapbox mapbox-gl