溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

React構(gòu)建組件的方式及區(qū)別是什么

發(fā)布時(shí)間:2022-08-08 11:18:14 來源:億速云 閱讀:120 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“React構(gòu)建組件的方式及區(qū)別是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“React構(gòu)建組件的方式及區(qū)別是什么”吧!

    一、組件是什么

    組件就是把圖形、非圖形的各種邏輯均抽象為一個統(tǒng)一的概念(組件)來實(shí)現(xiàn)開發(fā)的模式

    React中,一個類、一個函數(shù)都可以視為一個組件

    組件所存在的優(yōu)勢:

    • 降低整個系統(tǒng)的耦合度,在保持接口不變的情況下,我們可以替換不同的組件快速完成需求,例如輸入框,可以替換為日歷、時(shí)間、范圍等組件作具體的實(shí)現(xiàn)

    • 調(diào)試方便,由于整個系統(tǒng)是通過組件組合起來的,在出現(xiàn)問題的時(shí)候,可以用排除法直接移除組件,或者根據(jù)報(bào)錯的組件快速定位問題,之所以能夠快速定位,是因?yàn)槊總€組件之間低耦合,職責(zé)單一,所以邏輯會比分析整個系統(tǒng)要簡單

    • 提高可維護(hù)性,由于每個組件的職責(zé)單一,并且組件在系統(tǒng)中是被復(fù)用的,所以對代碼進(jìn)行優(yōu)化可獲得系統(tǒng)的整體升級

    二、如何構(gòu)建

    React目前來講,組件的創(chuàng)建主要分成了三種方式:

    • 函數(shù)式創(chuàng)建

    • 通過 React.createClass 方法創(chuàng)建

    • 繼承 React.Component 創(chuàng)建

    函數(shù)式創(chuàng)建

    React Hooks出來之前,函數(shù)式組件可以視為無狀態(tài)組件,只負(fù)責(zé)根據(jù)傳入的props來展示視圖,不涉及對state狀態(tài)的操作

    大多數(shù)組件可以寫為無狀態(tài)組件,通過簡單組合構(gòu)建其他組件

    React中,通過函數(shù)簡單創(chuàng)建組件的示例如下:

    function HelloComponent(props, /* context */) {
      return <div>Hello {props.name}</div>
    }

    通過 React.createClass 方法創(chuàng)建

    React.createClass是react剛開始推薦的創(chuàng)建組件的方式,目前這種創(chuàng)建方式已經(jīng)不怎么用了

    像上述通過函數(shù)式創(chuàng)建的組件的方式,最終會通過babel轉(zhuǎn)化成React.createClass這種形式,

    轉(zhuǎn)化成如下:

    function HelloComponent(props) /* context */{
      return React.createElement(
        "div",
        null,
        "Hello ",
        props.name
      );
    }

    由于上述的編寫方式過于冗雜,目前基本上不使用上

    繼承 React.Component 創(chuàng)建

    同樣在react hooks出來之前,有狀態(tài)的組件只能通過繼承React.Component這種形式進(jìn)行創(chuàng)建

    有狀態(tài)的組件也就是組件內(nèi)部存在維護(hù)的數(shù)據(jù),在類創(chuàng)建的方式中通過this.state進(jìn)行訪問

    當(dāng)調(diào)用this.setState修改組件的狀態(tài)時(shí),組價(jià)會再次會調(diào)用render()方法進(jìn)行重新渲染

    通過繼承React.Component創(chuàng)建一個時(shí)鐘示例如下:

    class Timer extends React.Component {
      constructor(props) {
        super(props);
        this.state = { seconds: 0 };
      }
    
      tick() {
        this.setState(state => ({
          seconds: state.seconds + 1
        }));
      }
    
      componentDidMount() {
        this.interval = setInterval(() => this.tick(), 1000);
      }
    
      componentWillUnmount() {
        clearInterval(this.interval);
      }
    
      render() {
        return (
          <div>
            Seconds: {this.state.seconds}
          </div>
        );
      }
    }

    三、區(qū)別

    由于React.createClass創(chuàng)建的方式過于冗雜,并不建議使用

    而像函數(shù)式創(chuàng)建和類組件創(chuàng)建的區(qū)別主要在于需要創(chuàng)建的組件是否需要為有狀態(tài)組件:

    • 對于一些無狀態(tài)的組件創(chuàng)建,建議使用函數(shù)式創(chuàng)建的方式

    • 由于react hooks的出現(xiàn),函數(shù)式組件創(chuàng)建的組件通過使用hooks方法也能使之成為有狀態(tài)組件,再加上目前推崇函數(shù)式編程,所以這里建議都使用函數(shù)式的方式來創(chuàng)建組件

    在考慮組件的選擇原則上,能用無狀態(tài)組件則用無狀態(tài)組件

    到此,相信大家對“React構(gòu)建組件的方式及區(qū)別是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI