在附加的示例代码沙箱中,我有一个使用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 的控制之下。它确实被正确删除和重新添加。