react-virtualized 无限列表图片闪屏问题修复

创建时间.png 2025-12-10
标签.png 性能优化
阅读量.png 17

背景

最近在使用 react-vertualized 库,开发一个无限滚动列表过程中,遇到一个问题。列表虽然可以一致滚动,但是列表的图片会突然的闪烁一下,找了很多地方,都没有结论,这里记录一下自己的解决方案。

方案

无限滚动列表如下图所示

无限滚动图示例

我的需求是通过 react-virtualized 实现一个照片墙。

图片闪烁,我先分析核心原因应该是图片重新渲染了,我找了很多导致图片重新渲染的地方,都没发现是啥影响了,图片的重复渲染。

没办法,只能退而求其次,转变思路,既然不能找到源头的问题,那我就解决自身问题,将图片的渲染缓存起来,避免重复渲染。

const ImageCell = React.memo<ImageCellProps>({img, onClick}) => {
  ...
}, (prevProps, nextProps) => {
   // 深度比较:比较 img 对象的所有属性
    const prevImg = prevProps.img;
    const nextImg = nextProps.img;

    // 如果 id 不同,需要更新
    if (prevImg.id !== nextImg.id) {
      return false; // 需要更新
    }

    // 如果 id 相同,比较其他可能变化的属性
    const shouldUpdate =
      prevImg.url !== nextImg.url ||
      prevImg.timestamp !== nextImg.timestamp;

    return !shouldUpdate; // 返回 true 表示 props 相同,不需要更新
})

核心逻辑有两点:

  1. 使用 React.memo 缓存图片组件,避免图片重新渲染

  2. 使用对象深度比较的方法,而不是对象相等的比较

至此,我的图片闪烁问题就得到了解决。希望以上有所帮助。

原文地址:https://webfem.com/post/react-virtualized-yh,转载请注明出处

webfem 头像
webfem 博客
🧰 最新工具