React-leaflet中mouseout事件调用resetStyle重置样式报错如何解决
问题根因
- react-leaflet 3.x 及以上版本对ref暴露实例的逻辑做了破坏性更新,和2.x版本完全不兼容:2.x版本中,原生Leaflet的图层、组件实例统一挂载在ref的
current.leafletElement字段上;3.x+版本直接将原生Leaflet实例挂载在ref.current上,彻底移除了leafletElement这一层冗余属性。 - 原有代码读取
geoJsonRef.current.leafletElement得到的值为undefined,在undefined上调用resetStyle方法就会直接抛出类型错误,这也是相同逻辑在2.8.0版本正常运行、高版本报错的核心原因。
修复方法
直接调整实例访问的层级,去掉多余的.leafletElement调用即可,修正后的代码如下:
geoJsonRef.current.resetStyle(e.target);
适配提示:如果是从react-leaflet 2.x整体升级到3.x/4.x版本,所有通过ref调用原生Leaflet实例的逻辑都需要做相同调整——Map、TileLayer、GeoJSON、Marker等所有官方组件的ref,都可以直接通过
ref.current拿到对应的原生Leaflet实例,不需要再访问leafletElement属性。
内容的提问来源于stack exchange,提问作者Prabhakar kotipalli
相关产品推荐
相关产品推荐

