【react】---pureComponent的理解

一、pureComponent的理解

   pureComponent表示一个纯组件,可以用来优化react程序。减少render函数渲染的次数。提高性能

  pureComponent进行的是浅比较,也就是说如果是引用数据类型的数据,只会比较不是同一个地址,而不会比较这个地址里面的数据是否一致

  浅比较会忽略属性和或状态突变情况,其实也就是数据引用指针没有变化,而数据发生改变的时候render是不会执行的。如果我们需要重新渲染那么就需要重新开辟空间引用数据

  好处:

  当组件更新时,如果组件的props或者state都没有改变,render函数就不会触发。省去虚拟DOM的生成和对比过程,达到提升性能的目的。具体原因是因为react自动帮我们做了一层浅比较

二、例子

import React, { PureComponent } from "react";

export default class List extends PureComponent{
    constructor(){
        super();
        this.state = {
            userInfo:"李四",
            arr:[]
        }
        this.handleAdd = this.handleAdd.bind(this);
        this.handleModify = this.handleModify.bind(this);
    }
    render(){
        let {userInfo,arr} = this.state;
        return (
            <div>
                <h3>{userInfo}</h3>
                <ul>
                    {
                        arr.map((item,index)=>(
                            <li>{item}</li>
                        ))
                    }
                </ul>
                <button onClick={this.handleAdd}>添加</button>
                <button onClick={this.handleModify}>修改</button>
            </div>
        )
    }
    handleAdd(){
        //render函数不会执行 因为newArr还是引用这arr的地址 地址没有发生改变
        let newArr = this.state.arr;
        newArr.push("姓名");
        this.setState({
            arr:newArr
        })
    }
    handleModify(){
        //会执行  因为会做浅比较
        this.setState({
            userInfo:"张三"
        })
    }
}

 

三、使用场景

    1、PureComponent一般会用在一些纯展示组件上。切结props和state不能使用同一个引用

   2、在通过PureComponent进行组件的创建的时候不能够在写shouldComponentUpdate. 否则会引发警告

原文地址:https://www.cnblogs.com/nanianqiming/p/10527409.html

时间: 2024-08-30 13:18:03

【react】---pureComponent的理解的相关文章

React.Component 与 React.PureComponent(React之性能优化)

前言 先说说 shouldComponentUpdate 提起React.PureComponent,我们还要从一个生命周期函数 shouldComponentUpdate 说起,从函数名字我们就能看出来,这个函数是用来控制组件是否应该被更新的. React.PureComponent 通过prop和state的浅对比来实现shouldComponentUpate(). 简单来说,这个生命周期函数返回一个布尔值. 如果返回true,那么当props或state改变的时候进行更新: 如果返回fal

个人关于React的一些理解

##React背景 React是当前前端最火的框架,它的理念思想及构建方法比AngularJS更适合做webApp. 它是由facebook团队研发并开源到社区,所以它有很强大的技术背景,而且它的架构方式也很新颖,有很大的发展前景,极有可能是未来前端框架的领头羊,所以我们可以多关注关注React这个框架. ##React的实现 React是一个组件化的开发方式,任何一个组件都可以被替换或者被更改,每个DOM节点都可以当做是一个组件,这个理念和我们常用的模块化有点类似. 而其功能之所以这么强大是因

React 的setState 理解

我们都知道在React中,setState() 方法是用来改变组件状态的,在项目中也一直用,也没有出现什么问题(使用方法太简单了),但今天看了一篇文章,提到了setState 使用时的两个注意点,加深了对setState()的认识. setState() 最简单的使用方式,就是给它传递一个对象,对象中的属性就是我们要改变的状态,对象中只写我们要改变的那些状态就可以了,react 会把我们这次所做的改变和原来没有做改变的状态进行合并,形成最新的状态,重新渲染组件.写一个简单的例子,点击按钮显示点击

React生命周期函数理解

一.组件挂载阶段 1. componentWillMount() 该方法在首次渲染之前调用,在一个组件挂载到卸载的过程中,仅仅执行这一次.该函数内可以state初始化的工作,与constructor的作用类似.这里也是在render方法调用前最后一次修改state的方法. 这里不建议使用Ajax获取接口数据,因为是异步的,所以在接下来的第一次render中根本接收不到响应数据. willMount中setState还是会多一次渲染 2. render() 该方法创建一个虚拟dom,表示组件的输出

react面试题——理解setState(源码object.assign)

setState是异步的方式 this.setState({ counter:this.state.counter+1 }) console.log(this.state.counter) setState是异步,执行最后一个setState 同步执行的方法,传递函数 1,this.setState(nextState=>{ return{ counter: nextState.counter+1 } }) 2,setTimeout(()=>{ this.changeValue() },100

React 的 PureComponent Vs Component

一.它们几乎完全相同,但是PureComponent通过prop和state的浅比较来实现shouldComponentUpdate,某些情况下可以用PureComponent提升性能 1.所谓浅比较(shallowEqual),即react源码中的一个函数,然后根据下面的方法进行是不是PureComponent的判断,帮我们做了本来应该我们在shouldComponentUpdate中做的事情 if (this._compositeType === CompositeTypes.PureCla

react 中的 PureComponent

React.PureComponent最重要的一个用处就是优化React应用,因为它减少了应用中的渲染次数,所以对性能的提升是非常可观的. 原理:在普通的 componnet 组件中,shouldComponentUpdate 使用来限定组件是否应该被更新的,他的默认返回值都是 true,所以即便是 state 和 props 没有发生改变时,也会导致组件重绘.因此针对上述情况,React 引入了 PureComponent 纯组件,它改变了 shouldComponentUpdate 生命周期

React性能优化之PureComponent 和 memo使用分析

前言 关于react性能优化,在react 16这个版本,官方推出fiber,在框架层面优化了react性能上面的问题.由于这个太过于庞大,我们今天围绕子自组件更新策略,从两个及其微小的方面来谈react性能优化. 其主要目的就是防止不必要的子组件渲染更新. 子组件何时更新? 首先我们看个例子,父组件如下: import React,{Component} from 'react'; import ComponentSon from './components/ComponentSon'; im

react学习(一)组件

react这个东西,说实话,我刚刚接触一个月不到.感觉这玩意很颠覆我以前的前端开发 比方说,可能,整个项目,并没有一个html文件 比方说,以前我们写前端代码,分的清清楚楚,html里面就是放dom,css里面放样式,js里面放逻辑处理 比方说... 手里头正好在写一个项目,也顺带着看着书,就稍微记一点自己的理解 组件 我觉得这个是react的核心了哇 以前也写组件,毕竟是加快开发的东西,就像雕版印刷最后发展到活字印刷的必然性.组件也是必然的. 可复用很重要,一个项目,甚至多个项目,肯定会有很类