运用shouldComponentUpdate举行机能优化

尽人皆知,react中props,state值的变化,会致使组件从新衬着。运用shouldComponentUpdate就是为了削减render不必要的衬着。 本文偏重回复以下题目:

1:怎样运用运用shouldComponentUpdate记性优化;

shouldComponentUpdate(nexrProps) {
    if (this.props.num === nexrProps.num) {
        return false
    }
    return true;
}

置信人人都晓得这类体式格局,shouldComponentUpdate供应了两个参数nextProps和nextState,示意下一次props和一次state的值,当函数返回false时刻,render()要领不实行,组件也就不会衬着,返回true时,组件照旧重衬着。此要领就是拿当前props中值和下一次props中的值举行对照,数据相称时,返回false,反之返回true。然则此要领面临庞杂的对象时,就没有结果了,比如说props长成如许,就没法应对了,由于在js中,object,array,function属于援用范例,纵然转变个中数据,他们指向的照样统一内存地址,所以采纳上面的推断就不行了。

 obj: {
    age: 12,
    name: 'xioabbao',
    student: {
        count: 1
    }
}

2: 解决要领有三种:

(1)运用setState转变数据之前,先采纳es6中assgin举行拷贝,然则assgin只深拷贝的数据的第一层,所以说不是最圆满的解决办法。

const o2 = Object.assign({},this.state.obj)
    o2.student.count = '00000';
    this.setState({
        obj: o2,
    })

(2)运用JSON.parse(JSON.stringfy())举行深拷贝,然则碰到数据为undefined和函数时就会错。

const o2 = JSON.parse(JSON.stringify(this.state.obj))
    o2.student.count = '00000';
    this.setState({
        obj: o2,
    })

(3)运用immutable.js举行项目的搭建。immutable中考究数据的不可变性,每次对数据举行操纵前,都邑自动的对数据举行深拷贝,项目中数据采纳immutable的体式格局,能够轻松解决题目,然则又多了一套API去进修。

此文章属于个人一时看法,愿望人人多多指教。
    原文作者:ivan
    原文地址: https://segmentfault.com/a/1190000017075809
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞