其他分享
首页 > 其他分享> > React性能优化

React性能优化

作者:互联网

一、事件的优化
1、构造函数中声明

export default MyCom extends Component{
    constructor(){
        super()
        this.fun = this.fun.bind(this)
    }
    render(){
        return(
            <div onClick={this.fun}></div>
        )
    }
	fun(){
        console.log("fun")
    }
}

此中方式只会在构造函数中创建一次,性能最好,但无法传值

2、在组件中声明

export default MyCom extends Component{
    render(){
        return(
            <div onClick={this.fun.bind(this, arg)}></div>
    	)
	}
    fun(){
        console.log("fun")
    }
}

该方法可以解决以上不能传参的问题,但每次在render时都会重新执行一遍函数

3、在渲染内容中使用箭头函数

export default MyCom extends Component{
    render(){
        return(
            <div onClick={(arg)=>this.fun(arg)}></div>
    	)
	}
    fun(){
        console.log("fun")
    }
}

该方法每次执行render时都会重新生成箭头函数,极不推荐

二、数据结构优化
使用Immutable对Reducer的数据进行管理

import immutable from "immutable"
const defaulteState = immutable.fromJS({
    list: []
})

export default (state = defaultState, action)=>{
    switch(action.type){
        case "Add":
            return state.updateIn(["list"], list=>list.push(action.payload))
        default:
            return state
    }
}

使用该方法可以减少在修改值时无需创建新的对象,减少内存的消耗,从而达到性能优化的目的

三、渲染优化
shuoldComponentUpdate的优化
BaseComponent.js

import React from "react";
import {is} from "immutable";
export default class BaseComponent extends React.Component{
	shouldComponentUpdate(nextProps, nextState, nextContext) {
        let thisState = this.state || {};
        let thisProps = this.props || {};
        nextProps = nextProps || {};
        nextState = nextState || {};

        if(Object.keys(thisState).length != Object.keys(nextState).length 
           || Object.keys(thisProps).length != Object.keys(nextProps).length){
            return true;
        }

        for(var key in nextProps){
            if(!is(nextProps[key],thisProps[key])){
                return true;
            }
        }

        for(var key in nextState){
            if(!is(nextState[key],thisState[key])){
                return true;
            }
        }

        return false;

    }
}

MyComponent.js

class MyComponent extends BaseComponent{
    render(){
        return(<div></div>)
    }
}

根据比较的结果是否一致,来判定是否需要重新渲染

四、组件优化
PureComponent是纯组件
特点:
一般作为UI组件使用
会对数据进行一次浅比较,只会关注数据的地址是否改变,若未改变则不会渲染
使用了该组件后,禁止使用shouldCoponentUpdate,否则会破坏PureCoponent的规则

W Y L 发布了61 篇原创文章 · 获赞 1 · 访问量 786 私信 关注

标签:return,render,nextProps,default,性能,React,key,fun,优化
来源: https://blog.csdn.net/weixin_45959525/article/details/104168664