防止图像在每次状态更改时重新渲染 - React

Roh*_*wal 6 typescript reactjs react-hooks

在我的组件中,我以以下方式使用了图像:

<div className="margin-10 flex-row-center">
                    <span>
                        <img src={spinner} className="spinner" />
                    </span>
                    <span className="padding-10">
                        We are checking your details
                    </span>
</div>
Run Code Online (Sandbox Code Playgroud)

这是来自一个包含许多状态的大型功能组件的几行代码。该组件有时也用作其他组件的子组件。

现在,每当状态更新时,都会重新渲染组件。自然。

然而,图像上的视觉更新是可见的,这不是一个好的用户体验。

关于如何防止这种不必要的图像重新渲染的任何帮助。另外,如果有任何其他方法可以在 React 中使用图像,可以解决这个问题,将会很有帮助。

HMR*_*HMR 5

您可以尝试使图像成为自己的纯组件:

const Image = React.memo(function Image({ src }) {
  return <img src={src} className="spinner" />;
});
Run Code Online (Sandbox Code Playgroud)

然后使用它:

<div className="margin-10 flex-row-center">
  <span>
    <Image src={spinner} />
  </span>
  <span className="padding-10">
    We are checking your details
  </span>
</div>
Run Code Online (Sandbox Code Playgroud)

这是一个工作片段:

const Image = React.memo(function Image({ src }) {
  return <img src={src} className="spinner" />;
});
Run Code Online (Sandbox Code Playgroud)
<div className="margin-10 flex-row-center">
  <span>
    <Image src={spinner} />
  </span>
  <span className="padding-10">
    We are checking your details
  </span>
</div>
Run Code Online (Sandbox Code Playgroud)

  • @HMR,您好,备忘录有助于防止状态更新时重新渲染。但是,当父级更新时如何防止重新渲染,这会触发包含此图像的子级重新渲染。在这种情况下,图像将重新渲染。父级仅向子级传递 2 个属性,一个函数和一个布尔值,这在父级更新时不会改变。那么,孩子不应该重新渲染吗? (2认同)
  • @RohanAgarwal 当传递给它的道具**没有**更改但父级由于某种原因(更改的道具、更改的本地状态、与 useSelector 或 useContext 不同的结果)而重新渲染时,没有备忘录会阻止重新渲染。在我的回答中;如果 `src` 没有改变,则图像不会重新渲染。 (2认同)