【React】通过使用React.memo来改善显示性能

以前我总结了使用代码分割来改善React的显示性能。现在,我对React.memo对显示的影响进行了验证,并整理了相关内容。

React.memo是什么

React.memo是一个高阶组件(接受一个组件并返回一个新组件的函数)。

当给予某个组件相同的props并渲染相同的结果时,可以通过将该组件包装在React.memo中来记忆结果。通过重用React所存储的渲染结果,可以提高显示性能。

然而,React.memo只是用于性能优化的方法,不推荐将其用于“阻止渲染”。
由于可能引发错误,最好不要滥用它。

顺便提一下,在Class组件中实现类似的功能,可以使用React.PureComponent或shouldComponentUpdate()这两个生命周期方法。

验证

スクリーンショット 2021-05-10 22.03.23.png
スクリーンショット 2021-05-10 22.11.59.png

创建应用程序。

我要创建一个名为App的组件,它是Person组件的父组件。
根据showPerson的状态(true/false),切换Person的显示。

import React, useState from 'react';
import logo from './logo.svg';
import './App.css';

import Person from './person.component';

const App = () => {

  const initialState = {
    count: 0,
    person: { name: 'Jack', age: 22 },
    showPerson: false,
  }

  const [state, setState] = useState(initialState)

  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        {state.showPerson ? <Person person={state.person} /> : null}
        Button Count: {state.count}
        <button
          onClick={() =>
            setState((prevState) => ({
              ...prevState,
              count: prevState.count + 1,
            }))
          }
        >
          Increase Count
        </button>
        <button
          onClick={() =>
            setState((prevState) => ({
              ...prevState,
              showPerson: !prevState.showPerson,
            }))
          }
        >
          Toggle Person
        </button>
      </header>
    </div>
  );
}

export default App;

生成Person

我要创建一个人组件。

未使用React.memo。

执行常规默认导出。

import React from 'react';

const Person = ({ person }) => {
  console.log('rendering');

  return (
    <div>
      <p>{person.name}</p>
      <p>{person.age}</p>
    </div>
  );
};

export default Person;

React.memo的使用

在导出Person时,使用React.memo进行包装。

import React from 'react';

const Person = ({ person }) => {
  console.log('rendering');

  return (
    <div>
      <p>{person.name}</p>
      <p>{person.age}</p>
    </div>
  );
};

export default React.memo(Person);

比较结果

我比较了在按下一次“Toggle Person”按钮后,连续按下“Increase Count”按钮多次的结果。

该人的渲染次数

スクリーンショット 2021-05-10 22.23.48.png
スクリーンショット 2021-05-10 22.38.38.png

个体的渲染时间

スクリーンショット 2021-05-10 22.46.41.png
スクリーンショット 2021-05-10 22.47.25.png

随着记忆功能的使用,使用React.memo进行初始渲染会花费更多时间。

根据dev-tool测速,考虑仅在必要时使用React.memo,因为它也有一些缺点。

以下是一些参考资料

以下是一些建议的资料

以下是供参考的资料

以下是可供参考的资料

以下是一些可以参考的资料

以下是一些推荐的资料

以下是一些可以借鉴的资料

以下是一些可供参考的资料

以下是一些可供查询的资料

以下是可供参考的一些资料

广告
将在 10 秒后关闭
bannerAds