赞
踩
setState() 的两个作用
过程:父组件重新渲染时,也会重新渲染子组件,但只会渲染当前组件子树(当前组件以其所有子组件)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mjVLBRHn-1675147428753)(images/组件更新.png)]](https://img-blog.csdnimg.cn/a2fd7ed738b5466e985637c0643f10f7.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JusBI7ro-1675147428756)(images/减轻state.png)]](https://img-blog.csdnimg.cn/8ac4aea1cfe1418b92eae91140b4fecf.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Li9jfXw-1675147428757)(images/shouldComponentUpdata.png)]](https://img-blog.csdnimg.cn/55bbcfcd256542fa95ade412bf10cb19.png)
需求:随机生成数字,显示在页面,如果生成的数字与当前显示的数字相同,那么就不需要更新UI,反之更新UI。
利用nextState参数来判断当前组件是否需要更新
class App extends React.Component { state = { number: 0 } // 点击事件,每次点击生成一个随机数 hanldeBtn = () => { this.setState({ number: Math.floor(Math.random() * 3) }) } // 将要更新UI的时候会执行这个钩子函数 shouldComponentUpdate(nextProps,nextState) { // 判断一下当前生成的 值是否与页面的值相等 if(nextState.number !== this.state.number){ return true } return false } render() { return ( <div> 随机数:{this.state.number} <br /> <button onClick={this.hanldeBtn}>生成随机数</button> </div> ) } }
利用props参数来判断是否需要进行更新
class App extends React.Component { state = { number: 0 } // 点击事件,每次点击生成一个随机数 hanldeBtn = () => { this.setState({ number: Math.floor(Math.random() * 3) }) } render() { return ( <div> <NumberBox number={this.state.number} /> <button onClick={this.hanldeBtn}>生成随机数</button> </div> ) } } class NumberBox extends React.Component { // 将要更新UI的时候会执行这个钩子函数 shouldComponentUpdate(nextProps, nextState) { // 判断一下当前生成的 值是否与页面的值相等 if (nextProps.number !== this.props.number) { return true } return false } render() { return ( <h1>随机数:{this.props.number} </h1> ) } }
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EUSN0Z4e-1675147428758)(images/PureComponent.png)]](https://img-blog.csdnimg.cn/17d2a01a813242e3bf58434a8e0135ca.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uv0xwLyx-1675147428759)(images/值类型比对.png)]](https://img-blog.csdnimg.cn/aafcd10034704240abd8d6d560f57a6d.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WHXYhvwP-1675147428760)(images/引用类型比对.png)]](https://img-blog.csdnimg.cn/d8e9b349218249a39c5ed816fea12deb.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4JU986az-1675147428761)(images/注意点.png)]](https://img-blog.csdnimg.cn/1c9c3f2d57e04879813ed535d29e1ea1.png)
本质上就是一个JS对象,用来描述你希望在屏幕上看到的内容
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TzEuw0S5-1675147428761)(images/虚拟DOM.png)]](https://img-blog.csdnimg.cn/0a64f543d7714f65beca2170cc5c6a84.png)
执行过程
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W7DIGqGg-1675147428762)(images/diff算法.png)]](https://img-blog.csdnimg.cn/9b6b561c097441db9f2088a3cd0d379f.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-52hCmo4J-1675147428763)(images/初次的虚拟DOM对象.png)]](https://img-blog.csdnimg.cn/2101378ed4d84272a9cca9ca83480012.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7r4VZUtF-1675147428763)(images/更新后的虚拟DOM对象.png)]](https://img-blog.csdnimg.cn/badeac9903f14619b8db61e26bd612e5.png)
黑马前端专栏干货多多,关注再学,好方便~
2023年前端学习路线图:课程、源码、笔记,技术栈另外此线路图实时更新!需要课后资料的友友们,可以直接告诉我喔~

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。