在对话框材质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} />
}


相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...