loading...
上次更新: 2023-06-10
Demo: https://codesandbox.io/s/react-memo-f78zyj?file=/src/App.js
React.memo 是什麼React.memo 來避免子元件沒必要的重新渲染。React.memo 是一個 HOC,他會幫我們比較元件的 props 有沒有改變,我們把子元件用 React.memo 包起來,只要 props 沒改變,子元件就不會跟著父元件 re-render。React.memo(CustomComponent, props),它接收兩個參數:
ChildChildexport default function App() {
const [count, setCount] = useState(0);
const [name, setName] = useState("");
return (
<div className="App">
<div>{count}</div>
<button
onClick={() => {
setCount(count + 1);
}}
>
Add
</button>
<br />
<input
value={name}
onInput={(e) => {
setName(e.target.value);
}}
/>
<Child name={name} />
</div>
);
}child component re-rendered 文字。function Child({ name }) {
console.log("child component re-rendered");
return <div>My name is {name}</div>;
}
export default Child;點擊按鈕將 count 加一時,會印出 child component re-rendered 文字,這代表子元件跟著父元件重新渲染了。
使用 React.memo 將子元件包起來
export default React.memo(Child);React.memo 是優化效能用,因為使用 memo 也是需要消耗記憶效能,若 props 變動頻繁時,就不需要使用。