亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

React高階組件

cncoder / 2346人閱讀

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

React高階組件
高階函數(shù): 接收函數(shù)作為輸入,或者輸出另一個(gè)函數(shù)的一類(lèi)函數(shù); 高階組件: 接收React組件作為輸入,輸出一個(gè)新的React組件的組件。

高階組件通過(guò)包裹一個(gè)新傳入的React組件,經(jīng)過(guò)一些邏輯處理,最終返回一個(gè)enchanted的React組件,是其他組件調(diào)用.

一些前提了解知識(shí)點(diǎn)

ReactComponent: 定義調(diào)用時(shí)的組件name

    function getDisplayName(component) {
        return component.displayName || component.name || "Component";    
        
    }

    export default function WithHOC(WrapComponent) {
        // 此處未定義名稱(chēng)
        return class extends React.Component {
            // 定義displayName;
            static displayName = `withHOC(${getDisplayName(WrapComponent)})`;
            render() {
                console.log("inside HOC");
                return (
                    return 
                )
            }
        }
    }
    App = WithHOC(App);

如果未定義displayName,那么進(jìn)行調(diào)試的時(shí)候,就會(huì)顯示如下:

    // react自動(dòng)定義名稱(chēng)
    |---_class2
      |---App
        ...

定義displayName后,顯示如下:

    |---withHOC(App)
      |---App
        ...
函數(shù)柯里化
深入理解javascript函數(shù)進(jìn)階系列第二篇——函數(shù)柯里化
koa框架實(shí)踐與中間件原理解析
react事件傳參

柯里化 Curry

只傳遞函數(shù)的一部分參數(shù)來(lái)調(diào)用它,讓它返回一個(gè)函數(shù)去處理剩下的參數(shù)

函數(shù)喬明 func(params)(otherParams);

在react里,通過(guò)函數(shù)柯里化,我們可以通過(guò)傳入不同的參數(shù)來(lái)得到不同的高階組件

基于屬性代理的方式

屬性代理最常見(jiàn)的高階組件的使用方式,上述描述的高階組件就是這種方式。它通過(guò)做一些操作,將被包裹組件的props和新生成的props一起傳遞給此組件,這稱(chēng)之為屬性代理。

import React from "react";
export default function withHeader(WrapperComponent) {
  return class extends React.Component {
    render() {
      const newProps = {
        test: "hoc"
      };
      // 透?jìng)鱬rops,并且傳遞新的newProps
      return (
        
) } } }
基于反向繼承的方式

這種方式返回的React組件繼承了被傳入的組件,所以它能夠訪(fǎng)問(wèn)到的區(qū)域、權(quán)限更多,相比屬性代理方式,它更像打入組織內(nèi)部,對(duì)其進(jìn)行修改。具體的可以參考附錄里提供的鏈接進(jìn)行深入學(xué)習(xí)。

export default function (WrappedComponent) {
  return class Inheritance extends WrappedComponent {
    componentDidMount() {
      // 可以方便地得到state,做一些更深入的修改。
      console.log(this.state);
    }
    render() {
      return super.render();
    }
  }
}
組合多個(gè)高階組件

上述高階組件為React組件增強(qiáng)了一個(gè)功能,如果需要同時(shí)增加多個(gè)功能需要怎么做?這種場(chǎng)景非常常見(jiàn),例如我既需要增加一個(gè)組件標(biāo)題,又需要在此組件未加載完成時(shí)顯示Loading.

@withHeader
@withLoading
class Demo extends Component{

}

使用compose可以簡(jiǎn)化上述過(guò)程,也能體現(xiàn)函數(shù)式編程的思想。

    const enhance = compose(withHeader,withLoading);
    @enhance
    class Demo extends Component{
    
    }
組合compose
compose可以幫助我們組合任意個(gè)(包括0個(gè))高階函數(shù),例如compose(a,b,c)回一個(gè)新的函數(shù)d,函數(shù)d依然接受一個(gè)函數(shù)作為入?yún)?,只不過(guò)在內(nèi)部會(huì)依次調(diào)用c,b,a,從表現(xiàn)層對(duì)使用者保持透明。
基于這個(gè)特性,我們便可以非常便捷地為某個(gè)組件增強(qiáng)或減弱其特征,只需要去變更c(diǎn)ompose函數(shù)里的參數(shù)個(gè)數(shù)便可。
compose函數(shù)實(shí)現(xiàn)方式有很多種,這里推薦其中一個(gè)recompact.compose,詳情見(jiàn)下方參考類(lèi)庫(kù)。

recompact:包含了一系列實(shí)用的高階組件庫(kù)
React Sortable:React拖動(dòng)庫(kù)
深入理解 React 高階組件:其中詳細(xì)介紹了屬性代理和反向繼承的區(qū)別。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/109105.html

相關(guān)文章

  • React 深入系列6:高階組件

    摘要:在項(xiàng)目中用好高階組件,可以顯著提高代碼質(zhì)量。高階組件的定義類(lèi)比于高階函數(shù)的定義。高階函數(shù)接收函數(shù)作為參數(shù),并且返回值也是一個(gè)函數(shù)。 React 深入系列,深入講解了React中的重點(diǎn)概念、特性和模式等,旨在幫助大家加深對(duì)React的理解,以及在項(xiàng)目中更加靈活地使用React。 1. 基本概念 高階組件是React 中一個(gè)很重要且比較復(fù)雜的概念,高階組件在很多第三方庫(kù)(如Redux)中都...

    2shou 評(píng)論0 收藏0
  • 深入淺出React高階組件

    摘要:博客地址背景知識(shí)在開(kāi)始講述高階組件前,我們先來(lái)回顧高階函數(shù)的定義接收函數(shù)作為輸入,或者輸出另一個(gè)函數(shù)的一類(lèi)函數(shù),被稱(chēng)作高階函數(shù)。 博客地址:http://www.luckyjing.com/post... 背景知識(shí) 在開(kāi)始講述高階組件前,我們先來(lái)回顧高階函數(shù)的定義:接收函數(shù)作為輸入,或者輸出另一個(gè)函數(shù)的一類(lèi)函數(shù),被稱(chēng)作高階函數(shù)。對(duì)于高階組件,它描述的便是接受React組件作為輸入,輸出...

    yuanzhanghu 評(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
  • 從零開(kāi)始學(xué)習(xí) React 高階組件

    01、介紹 React 高階組件也叫做 React HOC(High Order Component), 它是react中的高級(jí)技術(shù), 用來(lái)重用組件邏輯。 但高階組件本身并不是React API。它只是一種模式,這種模式是由react自身的組合性質(zhì)必然產(chǎn)生的。 那么在學(xué)習(xí)高階組件之前有一個(gè)概念我們必須清楚,就是高階函數(shù)。 02、高階函數(shù) 概念:高階函數(shù)是一個(gè)函數(shù),它接收函數(shù)作為參數(shù)或?qū)⒑瘮?shù)作...

    _Dreams 評(píng)論0 收藏0
  • 七進(jìn)七出React高階組件

    摘要:為了提高代碼的復(fù)用性和可維護(hù)性,高階函數(shù)應(yīng)運(yùn)而生。使用過(guò)的同學(xué),不知道有沒(méi)有使用過(guò),高階函數(shù)的作用和它是一樣的。高階函數(shù)在編程中扮演的角色就是火鍋鍋底的角色,它有公用的方法和屬性,而各種組件就是肉和蔬菜。 為什么要使用高階組件? 想想以前用原生和jQuery的項(xiàng)目,上千行的code映入眼簾,瞬間有種昏死過(guò)去的沖動(dòng)。代碼難以維護(hù),改一個(gè)bug可能出現(xiàn)N個(gè)bug,真的是很痛苦。于是乎組件化...

    miguel.jiang 評(píng)論0 收藏0

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

0條評(píng)論

cncoder

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<