到底何时使用PureComponent 才合适
首先,废话不多说,搜了一堆资料总结下:
- 组件中的state或者props发生变化才会渲染render
- PureComponent 是React官方对其进行了
shallowEqual(浅比较)
,也就是如果state或者props是Array或者Object的引用发生改变,就会重新渲染。否则,不会重新render。shallowEqual
从字面意思讲是"浅比较",那么什么事浅比较呢?
就是比较一个旧的props
和新props
的或者旧的state
和新的state
的长度是否一致,key是是否相同,以及它们对应的引用是否发生改变。仅仅做了一层的比较。所以这才叫做浅比较。
栗子:
parent组件
import React from 'react'
import List from './child'
class Parent extends React.PureComponent{
state = {
array:[1,2,3]
}
click(){
const {array} = this.state;
array.push(4);
this.setState({array:array})
}
render(){
const {array} = this.state;
return (
<div>
<List list={array} />
<button onClick={this.click.bind(this)}>测试</button>
</div>
)
}
}
export default Parent;
List子组件
import React from 'react'
class List extends React.PureComponent{
render(){
const {list} = this.props;
return (
<ul>
{
list.map((item,idx)=>{
return (
<li key={idx}>
{item}
</li>
)
})
}
</ul>
)
}
}
export default List;
主组件
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import Parent from './components/parent'
class App extends Component {
render() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<Parent/>
</header>
</div>
);
}
}
export default App;
总结
从上面我们发现
所以
PureComponent
并不是不发生重新渲染,而是在满足不了的条件下才会去帮我们重新渲染。所以
PureComponent
真正起到优化的地方是在纯组件上,也就是仅仅用来展示的组件。这样会避免展示的组件不必要的多次重复渲染。在一些复杂组件上用了也没有什么关系,只是在浅比较这一层就过不了,但是一定要记得props和state不可以是同一个引用。暂时总结这么多,如果发现更容易理解的方式,我再来追加。
总之一点、先使用在纯组件上,后面深刻理解后再逐步优化。
当前页面是本站的「Baidu MIP」版。查看和发表评论请点击:完整版 »
因本文不是用Markdown格式的编辑器书写的,转换的页面可能不符合MIP标准。