react-google-maps 在 StrictMode 下不会卸载组件



在附加的示例代码沙箱中,我有一个使用react-google-maps的地图。 当用<React.StrictMode>包装地图时,它将停止卸载组件。

我看到 react-google-maps 卸载组件的方式通常是使用以下命令将它们的映射设置为 null:instance.setMap(null)。我不明白为什么这种行为应该在StrictMode下中断.

下面是演示该问题的代码沙箱: https://codesandbox.io/s/jv61orz64y

谢谢!
乌里

我遇到了同样的问题,并在存储库中遇到了您的问题,因此遇到了这个问题。我已经详细介绍了这个问题,作为对您的回购问题的评论,但总结一下:

  • React-google-maps有点顽皮,实际上在组件的构造函数中做了一些渲染式的工作。在这种情况下,它会初始化 google.maps.Marker 并调用setMap。这具有将标记放在地图上的效果。
  • 它会从地图中删除标记componentWillUnmount
  • 组件可以被构造,但永远不会被mounted,当这种情况发生时,componentWillUnmount永远不会被调用,因为没有挂载任何东西可以卸载
  • 这意味着,如果组件已构造但从未挂载,因此从未调用componentWillUnmount,则标记永远不会从映射中删除
  • 在严格模式下,这种情况似乎发生了,请参阅下面的说明:

如果您查看我的演示分支,您会发现在非严格模式下,如果您加载页面放大然后缩小,则构建、挂载、更新、卸载然后重新挂载标记代理 (MyMarker(。但是,在严格模式下,会构建两个标记,但只安装一个标记。因此,这里发生的事情并不是在放大时标记永远不会被卸载,而是地图上始终有两个标记。一个通过建造但从未安装在地图上"孤立",另一个完全在 React 的控制之下。它确实被正确删除和重新添加。

相关内容

  • 没有找到相关文章

最新更新