亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

React優化子組件render的使用

2024-05-06 16:50:47
字體:
來源:轉載
供稿:網友

在react中,父組件的重新render會引發子組件的重新render,但是一些情況下我們會覺得這樣做有些多余,比如:

  1. 父組件并未傳遞props給子組件
  2. 新傳遞的props渲染結果不變
class A extends React.Component {  render() {    console.log('render')    return <div>這是A組件</div>  }}class Main extends React.Component {  render() {    return (      <div>        // 點擊button會讓A不斷調用render        <button onClick={() => this.setState({ a: 1 })}>Main</button>        <A />      </div>    )  }}

為了解決這個問題,需要分為ES6類組件和函數式組件兩種:

類組件

使用shouldComponentUpdate來對props和state進行判斷以此決定是否進行render

class A extends React.Component {  shouldComponentUpdate(nextProps, nextState) {    //兩次props對比    return nextProps.a === this.props.a ? false : true  }  render() {    console.log('render')    return <div>這是A組件</div>  }}class Main extends React.Component {  // ...  render() {    return (      <div>        <button onClick={() => this.setState({ a: 1 })}>Main</button>        <A a={this.state.a} />      </div>    )  }}

通過返回false來跳過這次更新

使用React.PureComponent,它與React.Component區別在于它已經內置了shouldComponentUpdate來對props和state進行淺對比,并跳過更新

//PureComponentclass A extends React.PureComponent {  render() {    console.log('render')    return <div>這是A組件</div>  }}class Main extends React.Component {  state = {    a: 1  }  render() {    return (      <div>        <button onClick={() => this.setState({ a: 1 })}>Main</button>        <A a={this.state.a} />      </div>    )  }}

函數組件

使用高階組件React.memo來包裹函數式組件,它和類組件的PureComponent類似,也是對對props進行淺比較決定是否更新

const A = props => {  console.log('render A')  return <div>這是A組件</div>}// React.memo包裹Aconst B = React.memo(A)const Main = props => {  const [a, setA] = useState(1)  console.log('render Main')  return (    <div>      // 通過setA(a + 1)讓父組件重新render      <button onClick={() => setA(a + 1)}>Main</button>      // 一直傳入相同的props不會讓子組件重新render      <B a={1} />    </div>  )}

它的第二個參數接受一個兩次props作為參數的函數,返回true則禁止子組件更新

其他

上面提到的淺比較就是根據內存地址判斷是否相同:

// extends React.Componentclass A extends React.Component {  render() {    console.log('render A')    console.log(this.props)    return <div>這是組件A</div>  }}class Main extends React.Component {  test = [1, 2, 3]  render() {    console.log('render Main')    return (      <div>        <button          onClick={() => {            // 父組件render            this.setState({})            this.test.push(4)          }}        >          Main        </button>        <A test={this.test} />      </div>    )  }}

結果是:

使用React.component:

React,子組件,render

使用React.PureComponent:

React,子組件,render

使用React.component,點擊之后子組件重新render。改為React.PureComponent之后,點擊button子組件并不會render。也因此,PureComponent根據前后內存地址判斷是否相等,所以向子組件傳遞函數作為props時,使用內聯箭頭函數的形式將會導致子組件的重新render;所以可以用箭頭函數作為成員變量的形式再將函數引用作為props傳遞。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲深夜福利在线| 在线播放精品一区二区三区| 久久久久久欧美| 日韩电影免费在线观看中文字幕| 亚洲成人aaa| 成人免费视频xnxx.com| 国产精品黄色av| 欧美日韩国产丝袜美女| 国产精品igao视频| 奇米影视亚洲狠狠色| 日本精品免费一区二区三区| 中文字幕亚洲欧美日韩高清| 亚洲色图美腿丝袜| 欧美理论电影在线播放| 一区二区三区精品99久久| 国产在线视频一区| 久久精品国产v日韩v亚洲| 精品国产一区久久久| 久久久久久国产精品美女| 午夜精品一区二区三区在线| 国语自产精品视频在线看| 亚洲国产精品成人精品| 麻豆国产va免费精品高清在线| 亚洲成人黄色网| 国产日韩欧美91| 国产精品视频免费在线| 亚洲第一视频在线观看| 亚洲一区中文字幕| 国产精品日日摸夜夜添夜夜av| 色综合久久久久久中文网| 在线观看国产成人av片| 亚洲桃花岛网站| 国产精品综合久久久| 久久99久久99精品免观看粉嫩| 亚洲黄色av网站| 亚洲欧美成人网| 亚洲国产精品国自产拍av秋霞| 日韩视频免费在线| 精品国内产的精品视频在线观看| 久久久久久国产免费| 日韩中文字幕在线看| 青青草精品毛片| 性欧美长视频免费观看不卡| 亚洲人成免费电影| 国产精品99蜜臀久久不卡二区| 久久免费视频网| 亚洲天堂男人的天堂| 欧美精品在线免费播放| 日韩一级黄色av| 日本视频久久久| 成人av番号网| 97在线看免费观看视频在线观看| 日韩不卡在线观看| 成人免费激情视频| 亚洲美女喷白浆| 亚洲成人精品在线| 精品国产一区二区在线| 精品久久国产精品| 成人h视频在线观看播放| 日韩精品免费观看| 中文字幕日韩欧美| 伊人精品在线观看| 欧美理论在线观看| 中文字幕国产精品久久| 亚州成人av在线| 亚洲精品午夜精品| 91久久精品久久国产性色也91| 国产精品第100页| 久久成人这里只有精品| 97香蕉超级碰碰久久免费的优势| 国语自产偷拍精品视频偷| 亚洲第一精品夜夜躁人人爽| 国产三级精品网站| 日韩欧美黄色动漫| 国产视频在线一区二区| 国产日韩欧美在线视频观看| 亚洲欧美激情在线视频| 亚洲国产精品久久久久久| 日韩电影中文字幕在线观看| 国产视频在线一区二区| 日韩一区二区欧美| 久久久久久久久亚洲| 日韩免费看的电影电视剧大全| 亚洲色图25p| 日韩精品在线观看一区| 国产有码在线一区二区视频| 最新日韩中文字幕| 国产成人欧美在线观看| 亚洲天堂男人的天堂| 日韩中文字幕av| 久久久天堂国产精品女人| 大量国产精品视频| 国内精品久久久久久| 精品久久久久久亚洲精品| 不卡av日日日| 亚洲激情视频网| 久久伊人91精品综合网站| 亚洲资源在线看| 蜜臀久久99精品久久久久久宅男| 日韩亚洲国产中文字幕| 成人性生交xxxxx网站| 成人国产精品日本在线| 久久精品国产电影| 日韩欧美a级成人黄色| 高清欧美电影在线| 亚洲人成电影网站| 国产一区二区三区高清在线观看| 亚洲第一偷拍网| 久久天天躁日日躁| 狠狠色香婷婷久久亚洲精品| 欧美在线视频在线播放完整版免费观看| 黑人精品xxx一区一二区| 国内精品久久久久影院优| 亚洲欧美成人精品| 欧美黄色片在线观看| 69久久夜色精品国产69乱青草| 91网站免费看| 亚洲国产精品成人va在线观看| www日韩中文字幕在线看| 欧美午夜激情视频| 岛国av一区二区三区| 欧美在线激情视频| 亚洲欧美日韩精品久久亚洲区| 亚洲国产中文字幕在线观看| 久久国产精品免费视频| 亚洲综合日韩在线| 久久人人爽人人爽人人片亚洲| 久久人91精品久久久久久不卡| 91手机视频在线观看| 影音先锋欧美精品| 欧美电影《睫毛膏》| 91牛牛免费视频| 欧美性猛交xxxx黑人| 久久国产精品久久久| 欧美日本在线视频中文字字幕| 欧美视频免费在线观看| 亚洲精品视频久久| 亚洲国内高清视频| 日韩精品视频在线播放| 亚洲影视九九影院在线观看| 亚洲精品99久久久久中文字幕| 91久久精品日日躁夜夜躁国产| 亚洲一区二区精品| 91免费视频网站| 98视频在线噜噜噜国产| 久久福利网址导航| 中文字幕亚洲欧美日韩2019| 国产精品青青在线观看爽香蕉| 日本久久久久久久| 精品久久久久久久久久久久| 亚洲国产成人一区| 欧美日韩国产麻豆| 日韩中文字幕网址| 欧美成人剧情片在线观看| 91精品中国老女人| 91精品视频专区| 亚洲第一精品久久忘忧草社区| 久久精品美女视频网站| 成人黄色激情网| 久久精品亚洲94久久精品| 亚洲国产精品小视频| 国产精品久久久精品| 欧美整片在线观看| 色噜噜亚洲精品中文字幕|