老莫的笔记本  
  
查看: 292|回复: 0

React17 谈性能优化 diff 与 PureComponent

[复制链接]

662

主题

878

帖子

5145

积分

超级版主

Rank: 8Rank: 8

积分
5145
发表于 2022-5-5 14:44:18 | 显示全部楼层 |阅读模式

  1. import React from "react";


  2. // 函数组件 1.没有继承关系 、2. 没有生命周期方法
  3. // 函数组件的性能优化 : 通过React.memo() 高阶函数 ,该函数会返回给我们一个优化后的组件


  4. // function DaMM(){
  5. //     console.log('这是Damm组件执行了一次渲染');
  6. //     return (
  7. //         <div>这是函数组件</div>
  8. //     )
  9. // }

  10. const DaMM = React.memo(
  11.     function (){
  12.         console.log('这是Damm组件执行了一次渲染');
  13.         return (
  14.             <div>这是函数组件</div>
  15.         )
  16.     }
  17.    
  18. );


  19. // class TTTT extends React.Component {
  20. class TTTT extends React.PureComponent {
  21.     constructor(){
  22.         super();
  23.         this.state={
  24.             m:'我'
  25.         }
  26.     }
  27.    
  28.     // 写在组件里的一个生命周期函数, 意思是,当父组件组件变动时,判断 这个子组件本身是否发生变化【或者说判断某个值】 ,
  29.     // 如果变了当父组件渲染时,同时渲染子组件,如果没变就不重新渲染子组件  后来这个模式省了,直接 继承 PureComponent  就可以完成当前组件的优化问题,所以推荐后期都继承这个类
  30.     // shouldComponentUpdate( nextProps, nextState,nextContext ){
  31.     //     if(nextState.m == this.state.m){
  32.     //         return false;
  33.     //     }
  34.     //     return true;
  35.     //     // return true; // 需要重新渲染
  36.     //     // return false; // 不需要重新渲染
  37.     // }

  38.     render() {
  39.         console.log('TTTT子组件渲染了render')
  40.         return (
  41.             <div>测试股 {this.state.m} </div>
  42.         )
  43.     }
  44. }
  45. // 1.diff算法的优化  
  46. class Newdiff extends React.Component {
  47.     constructor(){
  48.         super();
  49.         this.state={
  50.             age:17,
  51.             name:'花季'
  52.         }
  53.     }


  54.     render() {
  55.         console.log('Newdiff父组件渲染了render')
  56.         return (
  57.             <section>
  58.             <div>这里是性能优化测模块  <TTTT></TTTT> {this.state.age} {this.state.name}  </div>
  59.             <div> <DaMM></DaMM> </div>

  60.             <button onClick={()=>{this.testRender()}} >测render </button>
  61.             </section>
  62.         )
  63.     }
  64.     testRender(){
  65.         this.setState({
  66.             age:this.state.age+1
  67.         })
  68.     }
  69. }



  70. export default Newdiff;


复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表