狀態管理
有些網店應用程式需要能夠管理全域狀態的方法。有許多狀態管理庫可以協助您達成這個目標,例如 Redux 和 MobX。Salesforce 並不為任何特定的狀態管理庫背書,您無需使用任何狀態管理庫,也能建置 PWA Kit 應用程式。
您可以透過 Props 向元件提供狀態資訊,但若您想使用 React 更為進階的功能來管理狀態,這份指南也會介紹其他方法。
在元件之間分享狀態最簡單的方式,就是透過 Props 向元件提供狀態資訊。此元件必須是所有需要存取狀態資料的元件的父代元件。React 文件詳細說明了此技術,並將其稱為提升狀態。
React 的 Context API 簡化了將資料提供給大量元件的過程,而無需在應用程式元件樹的每個層級透過 Props 手動傳遞資料。
以下範例說明如何將 React Context API 與元件一起使用,來作為所有元件的包裝,為它們提供共用的狀態資料。
首先,先建立一個稱為 GlobalState
的元件,其中有兩個內容物件:
GlobalStateContext
:您可在此儲存全域狀態資料。GlobalDispatchContext
:您的dispatch
函式,可透過 reducer 函式傳回已更新的全域狀態快照。
每個 Context 物件都有一個 <Provider>
元件,可讓取用元件訂閱 Context 的變更。在此,Context 物件會使用 Props initialState
和dispatch
進行初始化。當您使用 useReducer
Hook 連結狀態至 reducer
時,會獲得這些 Props。如需進一步瞭解 React Hook 的相關資訊,包括如何將它們與 Context API 一起使用,請參閱官方 React Hook 參考文件。
以下說明如何定義並初始化使用 Context API 在網店應用程式中儲存全域狀態的元件:
位於 app/components/_app-config/index.jsx
的 AppConfig
特殊元件是您可以初始化狀態管理系統的地方。在此,props.children
包含您應用程式的所有元件,因此您要在此處新增 GlobalState
元件。
要獲得 Props 物件,您必須先將其初始化。使用 React Hook useReducer
來建立連結狀態至 reducer。useReducer
函式會接受 initialState
物件和從 GlobalState 元件匯入的 reducer
。接下來,請傳入已連結狀態和 dispatch
函式來修改該狀態。
舉例來說:
現在,您可以讓任何元件存取全域 Context 資料,包括進行更新的能力。從 GlobalState
元件匯入 GlobalStateContext
和 GlobalDispatchContext
,並提供這些 Context 物件給 useContext()
方法。
舉例來說:
您可以覆寫位於 app/components/_app-config/index.jsx
的預設 AppConfig
特殊元件,來自訂應用程式以使用狀態管理庫。
以下是在 AppConfig
內為您的 PWA 設定 Redux 的方式。此元件有四種您需要使用的方法:
restore
方法是您使用 reducer、初始狀態和任何中介軟體建立 Redux 儲存區的地方。。freeze
方法可讓您凍結狀態管理後端,以嵌入到頁面 HTML。extraGetPropsArgs
方法是您可以傳回任何您想在整個應用程式的getProps
方法中插入的額外引數的地方。在這種情況下,我們可以將 Redux 儲存區作為額外引數傳回。render
方法可讓您為狀態管理庫設定 context 提供器。舉例來說,您可以使用它來將應用程式包裝在 Redux 提供器內。
以下是簡短範例,說明如何使用 AppConfig
方式為您的網店應用程式設定 Redux。除了我們於此處說明的步驟之外,完整的解決方案還需要您使用 reducer、初始狀態和任何所需的中介軟體來建立您的儲存區。