欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Component 和 PureComponent 的区别;复制demo,肉眼可以的区别

程序员文章站 2024-02-05 15:37:34
一个简单的Demo,快速了解 React.Component 和 React.PureComponent的区别;只需复制代码就可以看到效果; ......

react.purecomponent它用当前与之前 props 和 state 的浅比较覆写了 shouldcomponentupdate() 的实现。
简单来说,就是purecomponent简单实现了shouldcomponentupdate()的功能
当然,如果你的数据结构比较复杂就不行了

首先看看第一段代码

 1 import react from 'react'
 2 
 3 class child extends react.component {
 4 
 5   render() {
 6     console.log('child render')
 7     return <div>child</div>;
 8   }
 9 }
10 
11 class app extends react.component {
12   state = {
13     a: 1,
14   };
15 
16   render() {
17     console.log('render');
18     return (
19       <>
20         <button
21           onclick={() => {
22             this.setstate({ a: 2 });
23           }}
24         >
25           click me
26         </button>
27         <child color={'red'}/>
28       </>
29     );
30   }
31 }
32 
33 export default app

当我们点击按钮更新了父组件的状态,那么子组件也会重新render,那么这个时候输出的是:

parent render
child render

当我们想优化组件render的时候,我们会使用shouldcomponentupdate() 。那么我现在把上面的 child 组件替换为如下:

 1 class child extends react.component {
 2 
 3   shouldcomponentupdate(nextprops, nextstate) {
 4     if (this.props.color !== nextprops.color) {
 5       return true
 6     }
 7   }
 8 
 9   render() {
10     console.log('child render')
11     return <div>child</div>;
12   }
13 }

这个时候,我们点击按钮更新父组件状态的时候,子组件的是不会render的,输入的是:

parent render

 

最后,我们在把child组件替换为如下:

1 class child extends react.purecomponent {
2   render() {
3     console.log('child render')
4     return <div>child</div>;
5   }
6 }

你会发现它和上图的child组件是一样的效果,同样只输出了:

parent render