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

首頁 > 編程 > JavaScript > 正文

React優化子組件render的使用

2019-11-19 11:36:03
字體:
來源:轉載
供稿:網友

在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.PureComponent:

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品中文在线| 亚洲片国产一区一级在线观看| 日韩中文字幕网址| 在线国产精品视频| 91精品国产一区| 亚洲精品suv精品一区二区| 久久久久久久久亚洲| 浅井舞香一区二区| 亚洲欧美一区二区三区情侣bbw| 一区二区三区视频免费| 久久久久久久久久久成人| 国产乱人伦真实精品视频| 日韩精品免费一线在线观看| 欧美午夜激情视频| 久久久久久网址| 精品久久久在线观看| 日韩免费在线观看视频| 亚洲欧洲在线观看| 国产精品久久久久久久久免费| 日韩精品一区二区三区第95| 九九九久久久久久| 中文字幕在线日韩| 精品久久久久久电影| 26uuu亚洲伊人春色| 91免费精品国偷自产在线| 秋霞av国产精品一区| xxx欧美精品| 亚洲xxxx做受欧美| 亚洲精品免费网站| 国产成人精品av| 成人免费观看a| 亚洲第一区第一页| 国产亚洲精品91在线| 91精品国产高清久久久久久| 久久久www成人免费精品| 91中文字幕在线| 亚洲一区二区久久久| 日韩精品免费在线观看| 欧美性色视频在线| 欧美限制级电影在线观看| 欧美裸体xxxx极品少妇软件| 欧美成人免费播放| 欧美国产欧美亚洲国产日韩mv天天看完整| 日韩中文字幕视频在线观看| 最近2019中文免费高清视频观看www99| 日韩一区二区在线视频| 久久天堂电影网| 91夜夜揉人人捏人人添红杏| 亚洲国产精品久久久久秋霞不卡| 欧洲永久精品大片ww免费漫画| 亚洲一区二区日本| 欧美成人精品激情在线观看| 久久国产天堂福利天堂| 久久激情五月丁香伊人| 91久久精品国产| 大胆人体色综合| 欧美成人全部免费| 国产精品成人一区二区三区吃奶| 亚洲一区二区中文| 成人中文字幕+乱码+中文字幕| 一区二区三区美女xx视频| 亚洲性线免费观看视频成熟| 91成人国产在线观看| 成人做爰www免费看视频网站| 97超级碰碰碰| 大胆人体色综合| 国产成人精品视频在线观看| 欧美精品一本久久男人的天堂| 久久精品色欧美aⅴ一区二区| 欧美激情在线有限公司| 日韩大胆人体377p| 777午夜精品福利在线观看| 亚洲精品一二区| 久久6精品影院| 欧美—级高清免费播放| 国产日本欧美一区| 国产日本欧美一区二区三区| 精品露脸国产偷人在视频| 91久久久久久久久久久| 性色av一区二区三区在线观看| 国产精品久久久久久久久久| 久久久精品视频成人| 国产精品一二三在线| 国产精品丝袜白浆摸在线| 91系列在线观看| 国产成人精品a视频一区www| 国内精品一区二区三区| 欧美大片va欧美在线播放| 国外成人在线视频| 国产啪精品视频| 欧美视频中文在线看| 色偷偷偷综合中文字幕;dd| 91产国在线观看动作片喷水| 青青草国产精品一区二区| 亚洲精品一区av在线播放| 亚洲欧美日韩中文在线| 国产在线播放不卡| 亚洲无线码在线一区观看| 欧美日韩国产综合视频在线观看中文| 91精品中文在线| 91日本在线视频| 在线视频欧美日韩| 久久免费国产精品1| 国产精品欧美久久久| 91精品国产91久久久久| 欧美在线性视频| 亚洲国产精品成人va在线观看| 伊人久久久久久久久久| 久久久久久综合网天天| 中文字幕久热精品视频在线| 91久久精品美女| 亚洲国产欧美日韩精品| 日韩中文字幕在线看| 精品国产成人av| 亚洲人成亚洲人成在线观看| 国产午夜精品免费一区二区三区| 理论片在线不卡免费观看| 亚洲图片欧美日产| 欧美电影在线观看高清| 国产欧美日韩视频| 久久影视电视剧免费网站| 欧洲精品毛片网站| 欧美色道久久88综合亚洲精品| 欧美在线一区二区视频| 日韩国产欧美区| 国内精品400部情侣激情| 俺去亚洲欧洲欧美日韩| 久久天天躁狠狠躁夜夜av| 亚洲国产欧美久久| 成人国产亚洲精品a区天堂华泰| 欧美视频在线观看 亚洲欧| 91久久嫩草影院一区二区| 精品国产依人香蕉在线精品| 青青草原一区二区| 尤物精品国产第一福利三区| 国产精品第一页在线| 亚洲视频在线免费看| 狠狠色狠狠色综合日日小说| 91久久夜色精品国产网站| 久久久久久12| 精品国产一区二区三区久久狼黑人| 亚洲精品wwwww| 国产精品r级在线| 国模私拍一区二区三区| 精品久久久久久久久久久| 97久久国产精品| 国产精品大片wwwwww| 国产精品亚洲一区二区三区| 久久国产精品久久精品| 国产午夜精品免费一区二区三区| 中文在线不卡视频| 久久精品99无色码中文字幕| 色狠狠av一区二区三区香蕉蜜桃| 精品中文字幕在线观看| 国产亚洲欧美日韩一区二区| 欧美激情视频一区二区三区不卡| 色综合视频网站| 97国产在线观看| 日韩欧美国产成人| 国产精品美女午夜av| 尤物九九久久国产精品的特点| 久久精品国产免费观看| 国产精品极品美女在线观看免费| 欧美最猛性xxxxx免费|