Skip to content

Commit 5299117

Browse files
committed
性能优化之memo,相当于函数组件里的shouldComponentUpdate
1 parent 64e8c0e commit 5299117

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

src/page/memo/index.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
2+
import React from 'react';
3+
4+
function MyComponent({name}) {
5+
/* 使用 props 渲染 */
6+
console.log('子组件渲染了');
7+
return (
8+
<div>
9+
{name}
10+
</div>
11+
)
12+
}
13+
function areEqual(prevProps, nextProps) {
14+
//true则不重新渲染, 相反则重新渲染
15+
return true;
16+
}
17+
export default React.memo(MyComponent, areEqual);

src/page/memoParent/index.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
2+
import React, { useState } from 'react';
3+
import Memo from '../memo/index'
4+
5+
function Page() {
6+
const [name, setName] = useState('Ming');
7+
const count = 10;
8+
return (
9+
<div style={{ marginLeft: 50 }}>
10+
<h2>子组件在任何情况下都不重新渲染</h2>
11+
<p>{name}</p>
12+
<button onClick={() => setName('Ming')}>Ming</button><br/><br/>
13+
<button onClick={() => setName('Anny')}>Anny</button><br/><br/>
14+
<Memo name={count} />
15+
</div>
16+
)
17+
}
18+
19+
export default Page;

src/router/index.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import EchartBox from '../page/echartBox/index'
1212
import ChinaMap from '../page/chinaMap/index'
1313
import UseMemo from '../page/useMemo/index'
1414
import UseCallback from '../page/useCallback/index'
15+
import Memo from '../page/memoParent/index'
1516

1617
function Header() {
1718
return (
@@ -45,6 +46,9 @@ function Header() {
4546
<li>
4647
<Link to="/optimize">性能优化之shouldComponentUpdate,及第三方动画库做简单动画</Link>
4748
</li>
49+
<li>
50+
<Link to="/memo">性能优化之memo,相当于函数组件里的shouldComponentUpdate</Link>
51+
</li>
4852
<li>
4953
<Link to="/echart">echart的简单应用</Link>
5054
</li>
@@ -81,6 +85,7 @@ function App() {
8185
<Route path="/map" component={ChinaMap} />
8286
<Route path="/useMemo" component={UseMemo} />
8387
<Route path="/useCallback" component={UseCallback} />
88+
<Route path="/memo" component={Memo} />
8489
</Switch>
8590
</div>
8691
</BrowserRouter>

0 commit comments

Comments
 (0)