手册
目录
使用 memo 会导致 React 跳过渲染组件,如果它的 props 没有改变。
这可以提高性能。
本节使用 React Hooks。 有关 Hooks 的更多信息,请参阅 React Hooks 部分。
在此示例中,即使待办事项没有更改,Todos 组件也会重新渲染。
index.js:
import { useState } from "react";
import ReactDOM from "react-dom/client";
import Todos from "./Todos";
const App = () => {
const [count, setCount] = useState(0);
const [todos, setTodos] = useState(["todo 1", "todo 2"]);
const increment = () => {
setCount((c) => c + 1);
};
return (
<>
Count: {count}
>
);
};
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render( );
Todos.js:
const Todos = ({ todos }) => {
console.log("child render");
return (
<>
My Todos
{todos.map((todo, index) => {
return {todo}
;
})}
>
);
};
export default Todos;
运行实例 »
当您单击增量按钮时,Todos 组件会重新渲染。
如果此组件很复杂,可能会导致性能问题。
要解决这个问题,我们可以使用 memo。
使用 memo 防止 Todos 组件不必要地重新渲染。
将Todos组件导出包装到memo中:
index.js:
import { useState } from "react";
import ReactDOM from "react-dom/client";
import Todos from "./Todos";
const App = () => {
const [count, setCount] = useState(0);
const [todos, setTodos] = useState(["todo 1", "todo 2"]);
const increment = () => {
setCount((c) => c + 1);
};
return (
<>
Count: {count}
>
);
};
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render( );
Todos.js:
import { memo } from "react";
const Todos = ({ todos }) => {
console.log("child render");
return (
<>
My Todos
{todos.map((todo, index) => {
return {todo}
;
})}
>
);
};
export default memo(Todos);
运行实例 »
现在 Todos 组件仅在通过 props 传递给它的 todos 时重新渲染更新了。
相关
视频
RELATED VIDEOS
科技资讯
1
2
3
4
5
6
7
8
9
精选课程
共5课时
17.2万人学习
共49课时
77.1万人学习
共29课时
61.8万人学习
共25课时
39.4万人学习
共43课时
71万人学习
共25课时
61.7万人学习
共22课时
23万人学习
共28课时
33.9万人学习
共89课时
125.2万人学习