javascript - React 卸载 30k+ 组件很慢

标签 javascript reactjs leaflet react-leaflet

我有一个 map ,其中包含大约 30k+ 交互式标记和一些过滤器。每当我选择一个过滤器并单击应用时,都会进行 API 调用以获取过滤后的数据。现在的问题是现有的 30k+ 标记将被删除(卸载),并将替换为来自 api 调用的新过滤数据。此卸载操作导致 UI 卡住大约 10 秒以上,并最终呈现过滤后的数据。发生此类操作时,我什至无法显示微调器。

如何优化如此大的数据集的挂载和卸载?。我已经使用了所有渲染优化,如 React.memo() 等,但问题是由于初始渲染和一次删除如此大的数据。

`<Map
     ref={mapRef}
     center={latlng}
     zoom={14}
     minZoom={12}
     preferCanvas={true}
  >
  <TileLayer
      attribution='&amp;copy <a href="http://osm.org/copyright" target="_blank" rel="noopener noreferrer">OSM</a>'
      url={`${OSM_URL}/tile/{z}/{x}/{y}.png`}
   />
   <MarkerClusterGroup chunkedLoading={true} chunkInterval={500}>
       <MarkerList markers={mydata} showInfoPopup={showInfoPopup} />
    </MarkerClusterGroup>
</Map>`

我考虑过的事情:

  1. 使用 display: none 而不是卸载。但这不会解决初始安装的问题,并且它不可能用于标记组件。
  2. 将渲染卸载到工作线程。 (不知道这在 React 中是否可行 - 最好的方法)
  3. 使用普通的旧 DOM 元素而不是 React 组件,但这并不是最佳选择

非常感谢任何关于如何处理如此庞大的数据集的指导。

最佳答案

我能够使用 Leaflet.js 的 clearLayers 方法清除所有标记节点。这解决了挂载和卸载缓慢的问题。

关于javascript - React 卸载 30k+ 组件很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63272985/

相关文章:

javascript - Leaflet:如何在 map 上显示所有图层?

javascript - 类型错误 : Cannot read property 'style' of null in javascript?

javascript - Node.Js 通过串口异步任务

javascript - 如何在 O(1) 中更新 redux/vuex 存储中的元素?

reactjs - 在material-ui中重用自定义样式

javascript - map 上的汽车跟踪

javascript - 覆盖层可通过在外部单击关闭

javascript - 语义 UI 步骤用法

reactjs - React - 函数作为 React 子节点无效。如果您从渲染中返回 Component 而不是 <Component/> ,则可能会发生这种情况

javascript - 在传单中的 map 上显示栅格数据