【发布时间】:2020-08-06 07:34:06
【问题描述】:
我有点纠结于如何实现这一点。
我正在渲染一张地图,我需要 useRef 在创建地图时将元素传递给地图。
首先要做的是下载源文件,然后mapkit 类可以使用。我用悬念来解决这个问题:
<Suspense fallback={<MapFallback />}>
<InternalMap {...props}></InternalMap>
</Suspense>
真正的好处是InternalMap 在mapkit 未准备好时抛出一个承诺,因此会显示回退,并且在InternalMap 内部我可以假设mapkit 已定义。然后在InternalMap里面我有:
const mapDivRef = useRef<HTMLDivElement>(null);
// This does not work because mapDivref.current is null, unless I decide to
// put it inside of a useEffeect, at which point I have to verify it's created.
const map = new mapkit.Map(mapDivRef.current, options);
return (
<div ref={mapRef} style={{ width: '100%', height: '100%' }}>
{children}
</div>
);
这里的问题是我需要使用useEffect 来创建我的地图,因为在渲染发生之前mapDivRef 是null。有没有办法在渲染之前定义 mapDivRef.current 或抛出错误,以便发生悬念回退?我要解决的问题是我的代码的 1/5 是 if (!map) return ...。我认为悬念会对此有所帮助,就像在初始加载 mapkit 时一样。我知道 mapkit 现在定义了如果我的组件被渲染。我现在正在尝试对map 做同样的事情。
【问题讨论】:
标签: javascript reactjs