欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React中的render何時(shí)執(zhí)行過程

 更新時(shí)間:2018年04月13日 11:41:23   作者:一路斜陽  
這篇文章主要介紹了React中的render何時(shí)執(zhí)行過程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

我們都知道Render在組件實(shí)例化和存在期時(shí)都會(huì)被執(zhí)行。實(shí)例化在componentWillMount執(zhí)行完成后就會(huì)被執(zhí)行,這個(gè)沒什么好說的。在這里我們主要分析存在期組件更新時(shí)的執(zhí)行。

存在期的方法包含:

  1. - componentWillReceiveProps
  2. - shouldComponentUpdate
  3. - componentWillUpdate
  4. - render
  5. - componentDidUpdate

這些方法會(huì)在組件的狀態(tài)或者屬性發(fā)生發(fā)生變化時(shí)被執(zhí)行,如果我們使用了Redux,那么就只有當(dāng)屬性發(fā)生變化時(shí)被執(zhí)行。下面我們將從幾個(gè)場(chǎng)景來分析屬性的變化。

首先我們創(chuàng)建了HelloWorldComponent,代碼如下所示:

import * as React from "react";
class HelloWorldComponent extends React.Component {
  constructor(props) {
    super(props);
  }
  componentWillReceiveProps(nextProps) {
    console.log('hello world componentWillReceiveProps');
  }
  render() {
    console.log('hello world render');
    const { onClick, text } = this.props;
    return (
      <button onClick={onClick}>
        {text}
      </button>
    );
  }
}

HelloWorldComponent.propTypes = {
  onClick: React.PropTypes.func,
};

export default HelloWorldComponent;

AppComponent組件的代碼如下:

class MyApp extends React.Component {
   constructor(props) {
    super(props);
    this.onClick = this.onClick.bind(this);
  }

  onClick() {
    console.log('button click');
    this.props.addNumber();
  }

  render() {
    return (
      <HelloWorld onClick={this.onClick} text="test"></HelloWorld>
    )
  }
}

const mapStateToProps = (state) => {
  return { count: state.count }
};

const mapDispatchToProps = {
  addNumber
};

export default connect(mapStateToProps, mapDispatchToProps)(MyApp);

這里我們使用了Redux,但是代碼就不貼出來了,其中addNumber方法會(huì)每次點(diǎn)擊時(shí)將count加1。

這個(gè)時(shí)候當(dāng)我們點(diǎn)擊button時(shí),你覺得子組HelloWorldComponent的render方法會(huì)被執(zhí)行嗎?

 

如圖所示,當(dāng)我們點(diǎn)擊button時(shí),子組件的render方法被執(zhí)行了??墒菑拇a來看,組件綁定的onClick和text都沒有發(fā)生改變啊,為何組件會(huì)更新呢?

如果在子組件的componentWillReceiveProps添加這個(gè)log:console.log(‘isEqual', nextProps === this.props); 輸出會(huì)是true還是false呢?

 

是的,你沒有看錯(cuò),輸出的是false。這也是為什么子組件會(huì)更新了,因?yàn)閷傩灾蛋l(fā)生了變化,并不是說我們綁定在組件上的屬性值。每次點(diǎn)擊button時(shí)會(huì)觸發(fā)state發(fā)生變化,進(jìn)而整個(gè)組件重新render了,但這并不是我們想要的,因?yàn)檫@不必要的渲染會(huì)極其影響我們應(yīng)用的性能。

在react中除了繼承Component創(chuàng)建組件之外,還有個(gè)PureComponent。通過該組件就可以避免這種情況。下面我們對(duì)代碼做點(diǎn)修改再來看效果。修改如下:

class HelloWorldComponent extends React.PureComponent 

這次在點(diǎn)擊button時(shí)發(fā)生了什么呢?


  

雖然componentWillReceiveProps依然會(huì)執(zhí)行,但是這次組件沒有重新render。

所以,我們對(duì)于無狀態(tài)組件,我們應(yīng)該盡量使用PureComponent,需要注意的是PureComponent只關(guān)注屬性值,也就意味著對(duì)象和數(shù)組發(fā)生了變化是不會(huì)觸發(fā)render的。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • React高階組件的使用淺析

    React高階組件的使用淺析

    高階組件就是接受一個(gè)組件作為參數(shù)并返回一個(gè)新組件(功能增強(qiáng)的組件)的函數(shù)。這里需要注意高階組件是一個(gè)函數(shù),并不是組件,這一點(diǎn)一定要注意,本文給大家分享React高階組件使用小結(jié),一起看看吧
    2022-08-08
  • React?錯(cuò)誤邊界Error?Boundary使用示例解析

    React?錯(cuò)誤邊界Error?Boundary使用示例解析

    這篇文章主要為大家介紹了React?錯(cuò)誤邊界Error?Boundary使用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 關(guān)于react-router的幾種配置方式詳解

    關(guān)于react-router的幾種配置方式詳解

    本篇文章主要介紹了關(guān)于react-router的幾種配置方式詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • React跨路由組件動(dòng)畫實(shí)現(xiàn)

    React跨路由組件動(dòng)畫實(shí)現(xiàn)

    在 React 中路由之前的切換動(dòng)畫可以使用 react-transition-group 來實(shí)現(xiàn),但對(duì)于不同路由上的組件如何做到動(dòng)畫過渡是個(gè)很大的難題,目前社區(qū)中也沒有一個(gè)成熟的方案,本文給大家分享React跨路由組件動(dòng)畫實(shí)現(xiàn),感興趣的朋友一起看看吧
    2023-10-10
  • 詳解如何在Remix 中使用 tailwindcss

    詳解如何在Remix 中使用 tailwindcss

    這篇文章主要為大家介紹了如何在Remix中使用tailwindcss方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • React路由組件三種傳參方式分析講解

    React路由組件三種傳參方式分析講解

    本文主要介紹了React組件通信之路由傳參(react-router-dom),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • React?Suspense前后端IO異步操作處理

    React?Suspense前后端IO異步操作處理

    這篇文章主要為大家介紹了React?Suspense前后端IO異步操作處理示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • React根據(jù)當(dāng)前頁面路由進(jìn)行自動(dòng)高亮示例代碼

    React根據(jù)當(dāng)前頁面路由進(jìn)行自動(dòng)高亮示例代碼

    要根據(jù)當(dāng)前頁面路由自動(dòng)高亮頂部菜單項(xiàng),可以使用 React Router 的 useLocation 鉤子來獲取當(dāng)前路徑,并根據(jù)路徑動(dòng)態(tài)設(shè)置菜單項(xiàng)的高亮效果,本文給大家介紹了一個(gè)完整的示例,展示如何根據(jù)當(dāng)前頁面路由自動(dòng)高亮頂部菜單項(xiàng),需要的朋友可以參考下
    2024-07-07
  • 淺談React Router關(guān)于history的那些事

    淺談React Router關(guān)于history的那些事

    這篇文章主要介紹了淺談React Router關(guān)于history的那些事,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • React中常見的動(dòng)畫實(shí)現(xiàn)的幾種方式

    React中常見的動(dòng)畫實(shí)現(xiàn)的幾種方式

    本篇文章主要介紹了React中常見的動(dòng)畫實(shí)現(xiàn)的幾種方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01

最新評(píng)論