我有这样的组成部分
import React, { Fragment, memo } from "react";
const Gurdingo = () => {
return <Fragment>100</Fragment>;
};
export default memo(Gurdingo);
我需要在这里使用备忘录吗? 或做出反应后就知道,无需重建部件Gurdingo。
答案 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);
在第一次渲染时,Rendering
和Rendering Memoized Gurdingo
均记录到控制台。按下触发App
重新渲染的按钮时,将记录Rendering
,表示该组件未跳过。