【发布时间】:2022-01-02 05:10:45
【问题描述】:
我有一个使用 mapbox 地图的应用程序,我试图允许从另一个单独的卡片组件调整视口。我这样做的方法是创建一个视口上下文并将视口和设置它的函数传递给地图和卡片组件。
这可行,但我遇到了重新渲染的问题。每当用户在地图上滚动时,视口会不断变化,因此 Viewport Provider 中的所有内容都会不断重新渲染。代码的简化版本如下
应用程序
<ViewportProvider>
*Container that holds both the map and the sidebar that renders the card components*
</ViewportProvider>
视口提供者
import React from "react";
const INITIAL_STATE = {
longitude: 15,
latitude: 25,
zoom: 1
};
export const ViewportContext = React.createContext();
export const ViewportProvider = (props) => {
const [viewport, setViewport] = React.useState(INITIAL_STATE);
return (
<ViewportContext.Provider
value={{
viewport,
setViewport,
}}
{...props}
/>
);
}
地图
import React, { useContext } from "react";
import ReactMapGL from "react-map-gl";
import { ViewportContext } from "./ViewportProvider";
const { viewport, setViewport } = useContext(ViewportContext);
<Map onViewportChange={nextViewport => setViewport(nextViewport)} {...viewport}/>
卡片
const {setViewport} = useContext(ViewportContext)
<Card onClick={setViewport(...newValue)}/>
当用户在地图上移动时,如何在不失去用户从卡片组件调整视口的能力的情况下停止过度重新渲染?
【问题讨论】:
标签: javascript reactjs react-hooks mapbox viewport