狀態管理

有些網店應用程式需要能夠管理全域狀態的方法。有許多狀態管理庫可以協助您達成這個目標,例如 ReduxMobX。Salesforce 並不為任何特定的狀態管理庫背書,您無需使用任何狀態管理庫,也能建置 PWA Kit 應用程式。

您可以透過 Props 向元件提供狀態資訊,但若您想使用 React 更為進階的功能來管理狀態,這份指南也會介紹其他方法。

在元件之間分享狀態最簡單的方式,就是透過 Props 向元件提供狀態資訊。此元件必須是所有需要存取狀態資料的元件的父代元件。React 文件詳細說明了此技術,並將其稱為提升狀態

React 的 Context API 簡化了將資料提供給大量元件的過程,而無需在應用程式元件樹的每個層級透過 Props 手動傳遞資料。

以下範例說明如何將 React Context API 與元件一起使用,來作為所有元件的包裝,為它們提供共用的狀態資料。

首先,先建立一個稱為 GlobalState 的元件,其中有兩個內容物件:

  1. GlobalStateContext:您可在此儲存全域狀態資料。
  2. GlobalDispatchContext:您的 dispatch 函式,可透過 reducer 函式傳回已更新的全域狀態快照。

每個 Context 物件都有一個 <Provider> 元件,可讓取用元件訂閱 Context 的變更。在此,Context 物件會使用 Props initialStatedispatch 進行初始化。當您使用 useReducer Hook 連結狀態至 reducer 時,會獲得這些 Props。如需進一步瞭解 React Hook 的相關資訊,包括如何將它們與 Context API 一起使用,請參閱官方 React Hook 參考文件

以下說明如何定義並初始化使用 Context API 在網店應用程式中儲存全域狀態的元件:

位於 app/components/_app-config/index.jsxAppConfig 特殊元件是您可以初始化狀態管理系統的地方。在此,props.children 包含您應用程式的所有元件,因此您要在此處新增 GlobalState 元件。

要獲得 Props 物件,您必須先將其初始化。使用 React Hook useReducer 來建立連結狀態至 reducer。useReducer 函式會接受 initialState 物件和從 GlobalState 元件匯入的 reducer。接下來,請傳入已連結狀態和 dispatch 函式來修改該狀態。

舉例來說:

現在,您可以讓任何元件存取全域 Context 資料,包括進行更新的能力。從 GlobalState 元件匯入 GlobalStateContextGlobalDispatchContext,並提供這些 Context 物件給 useContext() 方法。

舉例來說:

您可以覆寫位於 app/components/_app-config/index.jsx 的預設 AppConfig 特殊元件,來自訂應用程式以使用狀態管理庫。

以下是在 AppConfig 內為您的 PWA 設定 Redux 的方式。此元件有四種您需要使用的方法:

  1. restore 方法是您使用 reducer、初始狀態和任何中介軟體建立 Redux 儲存區的地方。。
  2. freeze 方法可讓您凍結狀態管理後端,以嵌入到頁面 HTML。
  3. extraGetPropsArgs 方法是您可以傳回任何您想在整個應用程式的 getProps 方法中插入的額外引數的地方。在這種情況下,我們可以將 Redux 儲存區作為額外引數傳回。
  4. render 方法可讓您為狀態管理庫設定 context 提供器。舉例來說,您可以使用它來將應用程式包裝在 Redux 提供器內。

以下是簡短範例,說明如何使用 AppConfig 方式為您的網店應用程式設定 Redux。除了我們於此處說明的步驟之外,完整的解決方案還需要您使用 reducer、初始狀態和任何所需的中介軟體來建立您的儲存區。