成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

理解React高階組件

jzman / 1107人閱讀

摘要:用簡(jiǎn)單的話來(lái)說(shuō),主要是為了更大程度的復(fù)用現(xiàn)有代碼,抽離代碼而產(chǎn)生的一個(gè)模式高階組件的參數(shù)可以為一個(gè)組件,通過(guò)一個(gè)組件再去生成另一個(gè)組件用官方的例子來(lái)解釋現(xiàn)有一個(gè)組件如下就是全局的數(shù)據(jù)源添加事件處理函數(shù)訂閱數(shù)據(jù)清除事件處理函數(shù)任何時(shí)候數(shù)據(jù)發(fā)生

用簡(jiǎn)單的話來(lái)說(shuō),主要是為了更大程度的復(fù)用現(xiàn)有代碼,抽離代碼而產(chǎn)生的一個(gè)模式
高階組件的參數(shù)可以為一個(gè)組件,通過(guò)一個(gè)組件再去生成另一個(gè)組件
用官方的例子來(lái)解釋:
現(xiàn)有一個(gè)CommentList組件如下

class CommentList extends React.Component {
  constructor() {
    super();
    this.handleChange = this.handleChange.bind(this);
    this.state = {
      // "DataSource" 就是全局的數(shù)據(jù)源
      comments: DataSource.getComments()
    };
  }

  componentDidMount() {
    // 添加事件處理函數(shù)訂閱數(shù)據(jù)
    DataSource.addChangeListener(this.handleChange);
  }

  componentWillUnmount() {
    // 清除事件處理函數(shù)
    DataSource.removeChangeListener(this.handleChange);
  }

  handleChange() {
    // 任何時(shí)候數(shù)據(jù)發(fā)生改變就更新組件
    this.setState({
      comments: DataSource.getComments()
    });
  }

  render() {
    return (
      
{this.state.comments.map((comment) => ( ))}
); } }

同時(shí)有另一個(gè)BlogPost組件如下:

class BlogPost extends React.Component {
  constructor(props) {
    super(props);
    this.handleChange = this.handleChange.bind(this);
    this.state = {
      blogPost: DataSource.getBlogPost(props.id)
    };
  }

  componentDidMount() {
    DataSource.addChangeListener(this.handleChange);
  }

  componentWillUnmount() {
    DataSource.removeChangeListener(this.handleChange);
  }

  handleChange() {
    this.setState({
      blogPost: DataSource.getBlogPost(this.props.id)
    });
  }

  render() {
    return ;
  }
}

可以看出這兩個(gè)組件中的結(jié)構(gòu)基本一致,都是通過(guò)DataSource接收數(shù)據(jù),然后監(jiān)聽(tīng),解除監(jiān)聽(tīng),然后渲染
那么我們就可以將公共的部分提取出來(lái),如下:

// 函數(shù)接受一個(gè)組件參數(shù)……
function withSubscription(WrappedComponent, selectData) {
  // ……返回另一個(gè)新組件……
  return class extends React.Component {
    constructor(props) {
      super(props);
      this.handleChange = this.handleChange.bind(this);
      this.state = {
        data: selectData(DataSource, props)
      };
    }

    componentDidMount() {
      // ……注意訂閱數(shù)據(jù)……
      DataSource.addChangeListener(this.handleChange);
    }

    componentWillUnmount() {
      DataSource.removeChangeListener(this.handleChange);
    }

    handleChange() {
      this.setState({
        data: selectData(DataSource, this.props)
      });
    }

    render() {
      // ……使用最新的數(shù)據(jù)渲染組件
      // 注意此處將已有的props屬性傳遞給原組件
      return ;
    }
  };
}

然后就可以通過(guò)withSubscription組件來(lái)生成新的組件:

const CommentListWithSubscription = withSubscription(
  CommentList,
  (DataSource) => DataSource.getComments()
);

const BlogPostWithSubscription = withSubscription(
  BlogPost,
  (DataSource, props) => DataSource.getBlogPost(props.id)
);


文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/105034.html

相關(guān)文章

  • react進(jìn)階系列:高階組件詳解(一)

    摘要:創(chuàng)建一個(gè)普通函數(shù)因?yàn)榈拇嬖谒宰兂蓸?gòu)造函數(shù)創(chuàng)建一個(gè)方法在方法中,創(chuàng)建一個(gè)中間實(shí)例對(duì)中間實(shí)例經(jīng)過(guò)邏輯處理之后返回使用方法創(chuàng)建實(shí)例而恰好,高階組件的創(chuàng)建邏輯與使用,與這里的方法完全一致。因?yàn)榉椒ㄆ鋵?shí)就是構(gòu)造函數(shù)的高階組件。 很多人寫(xiě)文章喜歡把問(wèn)題復(fù)雜化,因此當(dāng)我學(xué)習(xí)高階組件的時(shí)候,查閱到的很多文章都給人一種高階組件高深莫測(cè)的感覺(jué)。但是事實(shí)上卻未必。 有一個(gè)詞叫做封裝。相信寫(xiě)代碼這么久了,大...

    NervosNetwork 評(píng)論0 收藏0
  • 初識(shí)react高階組件

    摘要:也明確了大數(shù)據(jù)時(shí)代,前端所應(yīng)該具備的職業(yè)素養(yǎng)高階組件高階組件,高階組件就是一個(gè)組件包裹著另外一個(gè)組件中兩種的實(shí)現(xiàn)方法中兩種的實(shí)現(xiàn)方法返回的類繼承了。之所以被稱為是因?yàn)楸焕^承了,而不是繼承了。在這種方式中,它們的關(guān)系看上去被反轉(zhuǎn)了。 前言 最近一直再做數(shù)據(jù)可視化,業(yè)務(wù)的理解,數(shù)據(jù)的理解確實(shí)如數(shù)據(jù)可視化要求的一樣,有了更多的理解。但是技術(shù)上還停留在echart,Hchart, 畫(huà)圖上。正好...

    IamDLY 評(píng)論0 收藏0
  • React高階組件

    摘要:高階組件高階函數(shù)接收函數(shù)作為輸入,或者輸出另一個(gè)函數(shù)的一類函數(shù)高階組件接收組件作為輸入,輸出一個(gè)新的組件的組件。包含了一系列實(shí)用的高階組件庫(kù)拖動(dòng)庫(kù)深入理解高階組件其中詳細(xì)介紹了屬性代理和反向繼承的區(qū)別。 React高階組件 高階函數(shù): 接收函數(shù)作為輸入,或者輸出另一個(gè)函數(shù)的一類函數(shù); 高階組件: 接收React組件作為輸入,輸出一個(gè)新的React組件的組件。 高階組件通過(guò)包裹一個(gè)新傳入...

    cncoder 評(píng)論0 收藏0
  • 學(xué)習(xí)es7的Decorator(順帶寫(xiě)個(gè)react高階組件)

    摘要:為了代碼進(jìn)一步解耦,可以考慮使用高階組件這種模式。開(kāi)源的高階組件使用提供了一系列使用的高階組件,可以增強(qiáng)組件的行為,可以利用此庫(kù)學(xué)習(xí)高階組件的寫(xiě)法。通過(guò)使用此庫(kù)提供的高階組件,可以方便地讓列表元素可拖動(dòng)。 1. Decorator基本知識(shí) 在很多框架和庫(kù)中看到它的身影,尤其是React和Redux,還有mobx中,那什么是裝飾器呢。 修飾器(Decorator)是一個(gè)函數(shù),用來(lái)修改類的...

    xiyang 評(píng)論0 收藏0
  • React高階組件

    摘要:結(jié)語(yǔ)高階函數(shù)對(duì)于初學(xué)者來(lái)說(shuō)可能不太好理解,但當(dāng)你深入其中,了解其中的原理之后,我們可以使用高階函數(shù)來(lái)完成很多的工作。 前段時(shí)間在工作中寫(xiě)Hybrid頁(yè)面時(shí)遇到了這樣的一個(gè)場(chǎng)景,公司需要一系列的活動(dòng)組件,在每個(gè)組件注冊(cè)的時(shí)候都需要調(diào)用App端提供的一個(gè)接口。一開(kāi)始也考慮了幾種方式,包括mixin、組件繼承以及react高階組件。但經(jīng)過(guò)了種種衡量,最后選擇使用了高階組件的做法。 1、Mix...

    ThinkSNS 評(píng)論0 收藏0
  • 理解React高階組件(裝飾器)

    摘要:高階組件主要又分為屬性代理和反向繼承兩種類型,上述舉例中的函數(shù)就屬于屬性代理的類型。記住,高階函數(shù)返回的是一個(gè)函數(shù),我們只是對(duì)其進(jìn)行了相對(duì)應(yīng)的包裝。 首先在正式的高階組件之前我們先來(lái)了解一下函數(shù)的類似操作: function hello () { console.log(hello) } function WrapperHello (fn) { return func...

    frank_fun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<