render渲染优化
如果 当一个组件不再依赖于某个值时,则组件不需要更新 ,react 在默认情况下render 所有组件 如何解决?
graph TD
classComponent --> render --> purComponent --> 类组件继承 --> purComponents
FunctionComponent --> render --> meno --> 函数式组件meon -->包裹函数组件
函数式组件
import { memo } from 'react';
const ProductList = memo(() => {
console.log('Product Render');
return (
<div>ProductList </div>
)
})
export default ProductList
类组件
import { PureComponent } from 'react'
import Home from './components/Home'
import ProductList from './components/ProductList'
interface AppState {
message: string
}
export default class App extends PureComponent {
constructor(props: App) {
super(props)
this.state = {
message: '五花肉'
} as AppState
}
update() {
this.setState({ message: '111ss' })
}
shouldComponentUpdate(nextProps: Readonly<AppState>, nextState: Readonly<{}>, nextContext: any): boolean {
const { message } = this.state as AppState
if (message !== nextProps.message) {
return true
}
else {
return false
}
}
render() {
const { message } = this.state as AppState
return (
<div>
<div>这是一个{message}</div>
<button onClick={() => this.update()}>点击更新</button>
<Home message={message} />
<ProductList />
</div>
)
}
}
purComponents 原理
在 类组件 继承 pureComponents ,setstate 更新时如果引用的是同一个地址值时,视图将不会更新
原理:React内部 通过 shouldComponentUpdate 新的 props 和 旧的 props 进行浅层比较,如果是同一个引用地址 则React 会认为没有发生更新。