如何解决在对话框材质UI上无法显示Mapbox
请考虑以下代码:
import React,{ useEffect,useState } from 'react';
import { Dialog } from '@material-ui/core';
import mapboxgl from 'mapbox-gl';
export default function UseMapbox() {
const classes = useStyles();
mapboxgl.accessToken = token;
const mapRef = React.useRef();
useEffect(() => {
const map = new mapboxgl.Map({
container: mapRef.current,style: 'mapbox://styles/mapbox/streets-v11',center: [10,10],zoom: 9
});
},[]);
return (
<Dialog
open
onClose={onClose}
>
<div ref={mapRef} className={classes.map} />
</Dialog>
);
}
我面临的问题是 mapRef.current 未定义。 如果我不使用对话框,它将正常运行。所以我认为useEffect已经在Dialog完全呈现之前运行。
解决方法
直接使用mapbox-gl时,我遇到了类似的问题。
我通过添加一个包装程序而不是直接引用它来解决它:
import React,{ useEffect,useState } from 'react';
import { Dialog } from '@material-ui/core';
import mapboxgl from 'mapbox-gl';
export default function UseMapbox() {
return (
<Dialog open onClose={onClose}>
<MapboxWrapper />
</Dialog>
);
}
const MapboxWrapper = () => {
const classes = useStyles();
useEffect(() => {
const map = new mapboxgl.Map({
container: mapRef.current,style: 'mapbox://styles/mapbox/streets-v11',center: [10,10],zoom: 9
});
},[]);
return <div ref={mapRef} className={classes.map} />
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。