React hooks與Faced pattern

寫在開頭

  • 去年CTO一直跟我在宣揚faced模式,可是當時沒有get到它的點
  • 等我get到的時候,他已經不在我身邊工做了,真是一個悲傷的故事

閱讀本文前須要先了解的知識點

  • 什麼是react hooks ?前端

    • Hook 是 React 16.8 的新增特性。它可讓你在不編寫 class 的狀況下使用 state 以及其餘的 React 特性,例如:
import React, { useState } from 'react';

function Example() {
  // 聲明一個新的叫作 「count」 的 state 變量
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}
  • 什麼是faced模式(外觀模式)?react

    • 外觀模式:提供一個統一的接口,用來訪問子系統中的一羣接口。外觀模式定義了一個高層的接口,讓子系統更容易使用。
  • 什麼是自定義hooks?數據庫

    • 自定義hooks它是一個函數,其名稱以 「use」 開頭,函數內部能夠調用其餘的 Hook,一個常見的自定義hooks以下:
import { useState, useEffect } from 'react';

function useFriendStatus(friendID) {
  const [isOnline, setIsOnline] = useState(null);

  useEffect(() => {
    function handleStatusChange(status) {
      setIsOnline(status.isOnline);
    }

    ChatAPI.subscribeToFriendStatus(friendID, handleStatusChange);
    return () => {
      ChatAPI.unsubscribeFromFriendStatus(friendID, handleStatusChange);
    };
  });

  return isOnline;
}
這個 hook的做用是:經過傳入的 好友id,調用其餘的 hook,來判斷其是否在線。

正式開始

  • faced模式意在提供一個統一的接口,用來訪問子系統中的一羣接口
  • 在咱們精確的識別、劃分了業務模塊以後,極可能就會出現這種需求,須要經過react hooks提供更多的前端統一接口
  • 例如在作IM即時通信客戶端的時候,咱們可能會在客戶端,須要在一個好友羣組重判斷是否能經過預覽查看對方的朋友圈簡介後端

    • 業務拆解:
    • 首先獲取對方的uuid
    • 再經過客戶端數據庫查詢是否爲好友關係(島嶼)
    • 再經過api接口調用查詢是否有對方的朋友圈查看權限
    • 若是存在權限則拉取數據展現簡介,若是不存在則展現 -

拆解業務後的下一步 - 封裝自定義hook

  • 經過對方的uuid在客戶端數據庫查詢是否爲好友關係,應該是一個hook,這是一個常見的需求
  • 經過api調用是否有對方uuid的朋友圈查看權限以及簡介,也應該是一個hook
  • 最後咱們須要封裝一個大的hook,去組裝這兩個hook,咱們先繪製一個業務流程圖,而且拆解出幾個自定義hook

這個時候問題來了,若是不封裝 hook,那麼咱們將要在組件使用的地方去調用這幾個 hook或者函數,而後組件內部經過一系列處理判斷去完成這個業務邏輯判斷,但是這個經過頭像查看羣組內對方朋友圈的狀況不止一個地方會用到,那麼此時就須要複用這個邏輯,這裏就須要用到 faced模式了

faced模式的使用

  • 提供一個統一的接口,用來訪問子系統中的一羣接口
這個時候,咱們應該提供一個 hook,經過它去訪問這幾個 hook,最後在業務中去複用這個邏輯
  • 封裝統一對外的hook.用來訪問內部的多個hook
  • faced模式對外業務使用場景:設計模式

    • 用戶點擊羣組內其餘人頭像
    • 用戶點擊朋友圈評論區 - 朋友的頭像
    • 用戶經過名片點擊
    • 將來其餘的場景...具體業務場景以下圖所示:

這樣,你或許不只明白了爲何React會造出 hooks這個東西,還明白了什麼是 faced模式
  • 經過faced模式和react hooks的結合,在業務系統開發中,能夠極大的提高效率,而且能夠增強複雜業務系統的健壯性,單一邏輯的hook跟單一邏輯的後端接口對應,複雜的業務由faced模式統一提供對外的接口以訪問內部的子系統

寫在最後

  • 設計模式,真的很是重要,前提是你能理解它而且用在業務系統中,我在開發中見過絕大多數的人都只是知道可是並不會主動利用它,這或許就是爲什麼高級開發須要深刻理解設計模式
  • 若是感受寫得不錯,幫我點個贊吧,順便關注一下個人公衆號:前端巔峯
相關文章
相關標籤/搜索