reactjs - useState 的值始终是地图事件回调中的初始值
问题描述
我@esri/react-arcgis
用来显示基本地图。目标是在点击时发送请求以查找点击区域的一些数据。
这是我的地图:
<Map
onLoad={handleMapLoad}
onFail={handleMapLoadFail}
onClick={handleMapClick}
... // bunch of other properties (basemap, styles etc)
></Map>
我的问题是,当onClick
触发(handleMapClick
并被调用)时,组件的useState
值始终是初始值。它是这样定义的:const [mapViewReference, setMapViewReference] = useState(null);
.
它不应该总是为空,因为:
- 在
handleMapLoad
开始时被调用。它设置以下状态:setMapViewReference(view);
whileview
是我直接从 esri 库中获取的属性。 - 之后,我点击地图并执行回调
- 如果我
handleMapClick
从虚拟按钮调用状态/值将是正确的。
这是可以由useCallback
或不同的钩子处理的东西吗?我不确定这是否是 esri 库的问题...
这是在我的return
(功能组件)之前:
const handleMapClick = async event => {
console.log(mapViewReference); // This is always null, unless I call the function manually from a dummy button
const point = mapViewReference.toMap(event);
const response = await featureLayerReference.queryFeatures({...});
};
解决方案
是的,我曾经对 react-map-gl 有同样的问题。我认为它是组件挂载时的 onClick 函数的备忘录,并且当地图在任何状态更改时呈现时不会更新它。我所做的是setState
在地图点击事件触发时触发并useEffect
在事件状态更改时执行我的所有操作:
const [event,setEvent]= useState()
useEffect(()=>{
if(event){
console.log(mapViewReference); // This is always null, unless I call the function
manually from a dummy button
const point = mapViewReference.toMap(event);
const response = await featureLayerReference.queryFeatures({...});
}
},[event])
对于 Map 组件:
<Map
onLoad={handleMapLoad}
onFail={handleMapLoadFail}
onClick={setEvent}
... // bunch of other properties (basemap, styles etc)
></Map>
推荐阅读
- microsoft-graph-api - 图形文件上传 API - 图像已损坏
- xcode - 用于归档 iOS 应用的位码版本无效
- r - R按列中的数字对数据进行分组
- bash - 在 shell 脚本中对文本文件进行排序
- string - 如何在 Golang 中为字符串添加单引号?
- entity-framework-core - 如何定义应该使用哪个外键导航属性?
- reactjs - 当显式定义深层链接时,ngrok 不适用于 react-router
- ruby-on-rails - has_many :through 在 Active Record 中
- sql - PostgreSQL:将 JSON 数组打印为 CSV
- html - jquery 如何在父 div 的右侧为子 div 设置动画?