如果缺少道具,我应该使用备忘录吗?

时间:2019-07-07 20:31:49

标签: reactjs

我有这样的组成部分

import React, { Fragment, memo } from "react";

const Gurdingo = () => {
  return <Fragment>100</Fragment>;
};

export default memo(Gurdingo);

我需要在这里使用备忘录吗? 或做出反应后就知道,无需重建部件Gurdingo。

1 个答案:

答案 0 :(得分:5)

如果要避免组件在父级时重新渲染,则需要使用React.memo。 React不会因为没有任何道具而自动停止渲染组件。我们可以使用simple example进行检查:

import React from "react";
import ReactDOM from "react-dom";

import "./styles.css";

function App() {
  const [, setToggle] = React.useState(true);
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
      <button type="button" onClick={() => setToggle(x => !x)}>
        Re-render Parent
      </button>
      <br />
      <Gurdingo />
      <br />
      <GurdingoMemo />
    </div>
  );
}

const Gurdingo = () => {
  React.useEffect(() => {
    console.log("Rendering");
  });
  return <>100</>;
};

const GurdingoMemo = React.memo(() => {
  React.useEffect(() => {
    console.log("Rendering Memoized Gurdingo");
  });
  return <>100</>;
});

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

在第一次渲染时,RenderingRendering Memoized Gurdingo均记录到控制台。按下触发App重新渲染的按钮时,将记录Rendering,表示该组件未跳过。