真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

react高階組件指的是什么

這篇文章主要介紹了react高階組件指的是什么的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇react高階組件指的是什么文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。

目前創(chuàng)新互聯(lián)已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、南京網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

在react中,高階組件是一個(gè)函數(shù),是用于重用組件邏輯的高級(jí)技術(shù);高階組件用于接受一個(gè)組件作為參數(shù),返回一個(gè)新的組件,這個(gè)新的組件會(huì)使用傳給它的組件作為子組件,可以用屬性代理和反向繼承兩種方法來(lái)實(shí)現(xiàn)高階組件。

本教程操作環(huán)境:Windows10系統(tǒng)、react17.0.1版、Dell G3電腦。

react高階組件是什么意思

高階組件是一個(gè)函數(shù)(而不是組件),它接受一個(gè)組件作為參數(shù),返回一個(gè)新的組件。這個(gè)新的組件會(huì)使用你傳給它的組件作為子組件 -引用自React.js小書(shū)

高階組件(Higher-Order Components)是 React 中用于重用組件邏輯的高級(jí)技術(shù)。 HOC 本身不是 React API 的一部分。 它們是從 React 構(gòu)思本質(zhì)中浮現(xiàn)出來(lái)的一種模式。

在我們項(xiàng)目中使用react-redux框架的時(shí)候,有一個(gè)connect的概念,這里的connect其實(shí)就是一個(gè)高階組件。也包括類(lèi)似react-router-dom中的withRouter的概念

react高階組件指的是什么

構(gòu)建一個(gè)簡(jiǎn)單的hoc

function hello (){
    console.log("hello i  love react ")
}
function hoc(fn){
    return ()=>{
          console.log("first");
          fn();
          console.log("end");
    }
}
hello = hoc(hello);
hello();

實(shí)現(xiàn)高階組件的方法

實(shí)現(xiàn)高階組件的方法有如下兩種:

  • 屬性代理。高階組件通過(guò)唄包裹的React組件來(lái)操作props

  • 反向繼承。高階組件繼承于被包裹的React組件

接下來(lái)我們分別來(lái)闡述這兩種方法。

屬性代理

屬性代理是我們r(jià)eact中常見(jiàn)高階組件的實(shí)現(xiàn)方法,我們通過(guò)一個(gè)例子來(lái)說(shuō)明:

import React,{Component} from 'react';
const MyContainer = (WraooedComponent) => 
    class extends Component {
        render(){
            return 
        }
    }

從這里看到最重要部分是render 方法中返回了傳入 WrappedComponent的React組件。這樣,我們就可以通過(guò)高階組件來(lái)傳遞props。這種方法即為屬性代理。

自然,我們想要使用MyContainer這個(gè)高階組件就變得非常容易:

import React,{Component} from 'react';
class MyComponent extends Component{
    //...
}
export default MyContainer(MyComponent);

這樣組件就可以一層層地作為參數(shù)被調(diào)用,原始組件就具備了高階組件對(duì)它的修飾。就這么簡(jiǎn)單,保持單個(gè)組件封裝性的同時(shí)還保留了易用性。當(dāng)然,我們也可以用decorator來(lái)轉(zhuǎn)換。

當(dāng)使用屬性代理構(gòu)建高階組件時(shí),調(diào)用順序不同于mixin。上述執(zhí)行生命周期的過(guò)程類(lèi)似于堆棧調(diào)用:

didmount ->HOC didmount ->(HOCs didmount)->(HOCs will unmount)->HOC will unmount -> unmount

反向繼承

另一種構(gòu)建高階組件的方法稱(chēng)為反向繼承,從字面意思上看,它一定與繼承性相關(guān)。我們同樣來(lái)看一個(gè)簡(jiǎn)單的實(shí)現(xiàn)。

const MyContainer = (WrappedComponent)=>{
    class extends WrappedComponent {
        render(){
            return super.render();
        }
    }
}

如上代碼。高階組件返回的組件繼承于 WrappedComponent 。因?yàn)楸粍?dòng)地繼承了 WrappedComponent,所有的調(diào)用都會(huì)反向,這也是種方法的由來(lái)。

這種方法與屬性代理不太一樣。它通過(guò)繼承WrappedComponent來(lái)實(shí)現(xiàn),方法可以通過(guò)super來(lái)順序調(diào)用。因?yàn)橐蕾?lài)于繼承機(jī)制。HOC的調(diào)用順序和隊(duì)列是一樣的。

didmount -> HOC didmount ->(HOCs didmount) -> will unmount ->HOC will unmount ->(HOCs will unmount)

在反向繼承方法中,高階組件可以使用 WrappedComponent 引用,這意味著它可以使用 WrappedComponent 的state 、props。生命周期和render方法。但它不能保證完整的子組件樹(shù)被解析。它有兩個(gè)比較大的特點(diǎn),下面我們展開(kāi)來(lái)講一講。

渲染劫持

渲染劫持就是指的是高階組件可以控制 WrappedComponent的渲染過(guò)程,并渲染各種各樣的結(jié)果。我們可以在這個(gè)過(guò)程中在任何React元素輸出的結(jié)果中讀取、增加、修改、刪除props,或讀取或修改React元素樹(shù),或條件顯示。又或者用樣式包裹元素樹(shù)

控制state

高階組件可以讀取、修改或刪除WrappedComponent實(shí)例中的state,如果需要的話,也可以增加state。

組件命名

當(dāng)包裹一個(gè)高階組件時(shí),我們失去了原始 WrappedComponent的displayName,而組件名字是方便我們開(kāi)發(fā)與調(diào)試的重要屬性。

組件參數(shù)

有時(shí),我們調(diào)用高階組件需要傳入一些參數(shù),這可以用非常簡(jiǎn)單的方式來(lái)實(shí)現(xiàn)。

import React from 'react'
function HOCFactoryFactory(...params){
    return function HOCFactory(WrappedComponent){
        return class HOC extends Component{
            render(){
                return 
            }
        }
    }
}

當(dāng)你使用的時(shí)候,可以這么寫(xiě):

HOCFactoryFactory(params)(WrappedComponent)
//or
@HOCFactoryFactory(params)class WrappedComponent extends React.Component{}

這也是利用了函數(shù)式編程的特征??梢?jiàn),在React抽象的過(guò)程中,處處可見(jiàn)它的影子。

關(guān)于“react高階組件指的是什么”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“react高階組件指的是什么”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站欄目:react高階組件指的是什么
本文網(wǎng)址:http://weahome.cn/article/pocpei.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部