尽人皆知,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去进修。