我有以下问题:
我想使用react-leaflet
'sGeoJSON
组件创建一个简单的等值线图。我还想要一个工具提示,显示悬停在GeoJSON
功能上的值。问题是性能。可以在此处找到 CodePen 示例:https ://codepen.io/timester-the-typescripter/pen/gOXGKOY
我将事件处理程序附加到每个GeoJSON
功能,并在我的“主”组件中设置一个状态变量,该组件保存当前悬停区域的值。
const [selected, setSelected] = React.useState(null);
我的工具提示依赖于该状态变量来显示其值。因为每个鼠标悬停事件都会导致主组件状态发生变化,所以 GeoJSON 组件一直被重新渲染。这在 CodePen 示例中不是一个大问题,但对于完整的世界地图来说,这是不幸的。
我假设状态更改会导致这种情况,因为如果我注释掉 2setSelected
行(CodePen 中的第 55 行和第 67 行),重新渲染(对 的调用createGeoJSON
)停止,并且事件处理程序运行得更快,因为分析器图片显示以下。
我尝试了许多解决方案都没有成功。例如,我认为我无法记住 GeoJSON 组件,因为 Tooltip 必须是它的子组件,这取决于主组件的状态。
将来,我想根据悬停状态变量(例如图例等)添加更多组件。也许该变量也会比简单的数字更复杂一些。
我在这里有什么选择?我对此有另一个 stackowerflow 问题,但后来我没有完全理解这个问题,所以它不是超级专注。我正考虑用 Angular 重写它。我发现 react 和 react-leaflet 使用起来非常愉快,直到出现这个问题。