zishu's blog

zishu's blog

一个热爱生活的博主。https://zishu.me

React --萬物皆可組件

一、React 組件是什麼?#

組件,從概念上類似於 javascript 函數,他接受任意入參(props),並返回作用於描述頁面展示內容的 React 元素。

組件允許你將 UI 拆分為獨立可複用的程式碼片段,並對每個片段進行獨立構思。

1. 創建一個組件#

// 函數組件
function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

// class組件
class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

2. 渲染組件#

class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

ReactDOM.render(
  <Welcome />,
  document.getElementById('root')
);

3. 組件#

React 的基礎原則有三條,分別是:

  1. React 界面完全由數據驅動
  2. React 中一切都是組件
  3. props 是 React 組件之間通訊的基本方式

給組件輸入一個參數,最終返回一個 React Element,React Element 就是在頁面上展示的內容,相當於一個 DOM 節點

React 一大核心就是--萬物皆可組件

  • 用戶界面就是組件
  • 組件可以嵌套包裝組成複雜功能
  • 組件可以用來實現副作用

一個複雜的界面可以分割很很多簡單的組件,每個簡單的組件又可以分割成很多小組件

有些類似於類和對象的概念

二、組件的劃分#

  1. ** 無狀態組件:** 無狀態組件 (Stateless Component) 是最基礎的組件形式,由於沒有狀態的影響所以就是純靜態展示的作用。基本組成結構就是屬性(props)加上一個渲染函數(render)。由於不涉及到狀態的更新,所以這種組件的複用性也最強。例如在各 UI 庫中開發的按鈕、輸入框、圖標等等。

  2. ** 有狀態組件:** 組件內部包含狀態(state)且狀態隨著事件或者外部的消息而發生改變的時候,這就構成了有狀態組件(Stateful Component)。有狀態組件通常會帶有生命週期 (lifecycle),用以在不同的時刻觸發狀態的更新。在寫業務邏輯時常用到,不同場景所用的狀態和生命週期也會不同。

  3. ** 容器組件:** 為使組件的職責更加單一,耦合性進一步地降低,引入了容器組件 (Container Component) 的概念。重要負責對數據獲取以及處理的邏輯。下文的設計模式也會提到。

  4. 高階組件:“高階組件(HoC)” 也算是種組件設計模式。做為一個高階組件,可以在原有組件的基礎上,對其增加新的功能和行為。如打印日誌,獲取數據和校驗數據等和展示無關的邏輯的時候,抽象出一個高階組件,用以給基礎的組件增加這些功能,減少公共的代碼。

  5. **Render Callback 組件:** 組件模式是在組件中使用渲染回調的方式,將組件中的渲染邏輯委託給其子組件。也是種重用組件邏輯的方式,也叫 render props 模式。

三、設計原則#

React 的組件其實是軟體設計中的模塊,其設計原則也需遵從通用的組件設計原則,簡單說來,就是要減少組件之間的耦合性(Coupling),讓組件簡單,這樣才能讓整體系統易於理解、易於維護。

即,設計原則:

  • 接口小,props 數量少;
  • 劃分組件,充分利用組合(composition);
  • 把 state 往上層組件提取,讓下層組件只需要實現為純函數。

就像搭積木,複雜的應用和組件都是由簡單的界面和組件組成的。劃分組件也沒有絕對的方法,選擇在當下場景合適的方式劃分,充分利用組合即可。實際編寫代碼也是逐步精進的過程,努力做到:

  • 功能正常;
  • 代碼整潔;
  • 高性能。
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。