」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Expo with Redux Toolkit、檔案系統與 Redux Persist:綜合指南

Expo with Redux Toolkit、檔案系統與 Redux Persist:綜合指南

發佈於2024-11-07
瀏覽:627

Expo with Redux Toolkit, File System, and Redux Persist: A Comprehensive Guide

Redux Toolkit 是一個流行的函式庫,它透過提供一組實用程式和約定來簡化 Redux 開發。它包括一個減速器和動作創建模式,可以簡化編寫 Redux 邏輯的過程。將 Redux Persist 與 Redux Toolkit 結合可以顯著提高 React Native 應用程式中狀態管理的效率和可靠性。

expo-file-system 提供對裝置本機儲存的檔案系統的存取。它也能夠從網頁 URL 上傳和下載檔案

redux-persist-expo-file-system-storage 是 redux-persist 的一個儲存引擎,使用 Expo 的檔案系統 API。這允許您將 Redux 儲存的狀態保存到裝置的檔案系統中,確保即使應用程式關閉或重新啟動也能保存和恢復狀態。

配置 Redux Toolkit 儲存後,您可以整合 Redux Persist。首先安裝必要的依賴項:

npm i @reduxjs/toolkit 
npm i expo-file-system 
npm i redux-persist-expo-file-system-storage
npm i redux-persist

我們建立一個簡單的 Redux store @reduxjs/toolkit 來管理計數器狀態。我們定義一個計數為 0 的初始狀態,並建立一個名為 counter 的切片,它有兩個減速器:increment 和 decrement,分別將計數增加 1 和減少 1。匯出操作和減速器以在我們的 Redux 設定中使用,使我們能夠輕鬆管理整個應用程式中的計數器狀態。

// store/counter/counter.tsx
import { createSlice } from "@reduxjs/toolkit";

const initialState = {
  count: 0,
};

const counterSlice = createSlice({
  name: "couter",
  initialState,
  reducers: {
    increment: (state) => {
      state.count  = 1;
    },
    decrement: (state) => {
      state.count -= 1;
    },
  },
});

export const { increment, decrement } = counterSlice.actions;
export default counterSlice.reducer;

程式碼使用@reduxjs/toolkit在React Native應用程式中設定Redux存儲,並使用Expo的檔案系統進行持久儲存的redux-persist。它結合了減速器,包括計數器減速器,並確保從應用程式檔案系統內的指定目錄保存和載入它們的狀態。

// store/ConfigureStore.js
import { combineReducers } from "@reduxjs/toolkit";
import { documentDirectory, EncodingType } from "expo-file-system";
import { createExpoFileSystemStorage } from "redux-persist-expo-file-system-storage";

import CounterReducer from "./counter/counter";
import { persistReducer } from "redux-persist";
console.log('Document Directory:',documentDirectory);
export const expoFileSystemStorage = createExpoFileSystemStorage({
  storagePath: `${documentDirectory}customPathName/`,
  encoding: EncodingType.UTF8,
  debug: true,
});
const persist = (key, reducer) =>
  persistReducer(
    {
      key,
      storage: expoFileSystemStorage,
    },
    reducer
  );

const combinePersistReducers = (keys) =>
  Object.keys(keys).reduce(
    (obj, key) => ({
      ...obj,
      [key]: persist(key, keys[key]),
    }),
    {}
  );

const reducers = combineReducers({
  ...combinePersistReducers({
    count: CounterReducer,
  }),
});

export default reducers;

在這部分設定中,我們使用 @reduxjs/toolkit 配置和建立 Redux 儲存。我們匯入結合了reducers的rootReducer並停用serializedCheck中間件以防止redux-persist產生序列化錯誤。我們還設定了 redux-persist 來啟用狀態持久性並匯出儲存和持久器以與我們的 React Native 應用程式整合。此配置確保我們的應用程式的狀態即使在關閉或刷新後也能保持。

// store/index.js
import { configureStore } from "@reduxjs/toolkit";
import { persistStore } from "redux-persist";
import { Provider } from "react-redux";
import rootReducer from "./ConfigureStore";

const store = configureStore({
  reducer: rootReducer,
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware({
      serializableCheck: false,
    }),
});
const persistor = persistStore(store);

export { store, persistor };

透過記錄和了解 configureStore 檔案中的 documentDirectory 路徑,您可以深入了解 Redux Persist 資料在 Expo 環境中的儲存位置。這些知識不僅有助於調試,還可以確保您的資料持久性策略穩健且安全。現在,您可以自信地管理應用程式的狀態,並準確地了解資料的位置。

在此目錄中,redux-persist 將儲存您的持久狀態。通常,持久性資料會儲存在名為 persist-counter (或類似名稱,取決於您的配置)的檔案中。以下是導航到並查看此文件的方法:

// persist-count file

{"count":"0","_persist":"{\"version\":-1,\"rehydrated\":true}"}

有關完整範例,您可以查看該專案的 GitHub 儲存庫:GitHub 儲存庫連結

?我很想聽聽您對這個主題的想法!如果您對將 Expo 檔案系統與 Redux Persist 結合使用有任何疑問,或遇到任何問題,請在下面發表評論。我是來幫忙的! ?

版本聲明 本文轉載於:https://dev.to/varnitj178/expo-with-redux-toolkit-file-system-and-redux-persist-a-comprehensive-guide-4mlf?1如有侵犯,請洽study_golang@163 .com刪除
最新教學 更多>
  • 如何建立您的第一個 Python 遊戲:使用 PyGame 創建簡單射擊遊戲的逐步指南
    如何建立您的第一個 Python 遊戲:使用 PyGame 創建簡單射擊遊戲的逐步指南
    Hi lovely readers, Have you ever wanted to create your own video game? Maybe you’ve thought about building a simple shooter game where you can move ar...
    程式設計 發佈於2024-11-07
  • 為什麼我的 Java JDBC 程式碼在連接到 Oracle 時拋出“IO 錯誤:網路適配器無法建立連線”?
    為什麼我的 Java JDBC 程式碼在連接到 Oracle 時拋出“IO 錯誤:網路適配器無法建立連線”?
    診斷Oracle JDBC「IO 錯誤:網路適配器無法建立連線」嘗試使用JDBC 執行簡單的Java 程式碼時要連線到Oracle資料庫,您可能會遇到神秘的錯誤「IO 錯誤:網路適配器無法建立連線」。這個令人費解的消息源於 JDBC 驅動程式的模糊術語,並且可能由各種根本原因造成。以下是一些可能導致...
    程式設計 發佈於2024-11-07
  • 如何使用 SwingPropertyChangeSupport 動態更新 JTextArea?
    如何使用 SwingPropertyChangeSupport 動態更新 JTextArea?
    使用SwingPropertyChangeSupport 動態更新JTextArea在此程式碼中,每當底層資料模型表示時,SwingPropertyChangeSupport 用於觸發JTextArea 用於觸發JTextArea 中的更新透過ArrayForUpdating 類別進行更改。這允許動...
    程式設計 發佈於2024-11-07
  • 如何將 Bootstrap 欄位中的內容置中?
    如何將 Bootstrap 欄位中的內容置中?
    Bootstrap 列中內容居中在 Bootstrap 中,可以透過多種方法實現列中內容居中。 一常見的方法是在列 div 中使用align=“center”屬性。例如:<div class="row"> <div class="col-xs-1&...
    程式設計 發佈於2024-11-07
  • 使用 Golang 進行身份驗證、授權、MFA 等
    使用 Golang 進行身份驗證、授權、MFA 等
    "Ó o cara falando de autenticação em pleno 2024!" Sim! Vamos explorar como realizar fluxos de autenticação e autorização, e de quebra, entender a dife...
    程式設計 發佈於2024-11-07
  • 什麼是「export default」以及它與「module.exports」有何不同?
    什麼是「export default」以及它與「module.exports」有何不同?
    ES6 的“預設導出”解釋JavaScript 的ES6 模組系統引入了“預設導出”,這是一種定義預設導出的獨特方式。 module.在提供的範例中,檔案SafeString.js 定義了一個SafeString 類,並將其匯出為預設匯出,使用:export default SafeString;此...
    程式設計 發佈於2024-11-07
  • SafeLine 如何透過進階動態保護來保護您的網站
    SafeLine 如何透過進階動態保護來保護您的網站
    SafeLine 由長亭科技在過去十年中開發,是一款最先進的 Web 應用程式防火牆 (WAF),它利用先進的語義分析演算法來提供針對線上威脅的頂級保護。 SafeLine 在專業網路安全圈中享有盛譽並值得信賴,已成為保護網站安全的可靠選擇。 SafeLine 社群版源自企業級 Ray Shiel...
    程式設計 發佈於2024-11-07
  • 在 React 中建立自訂 Hook 的最佳技巧
    在 React 中建立自訂 Hook 的最佳技巧
    React 的自訂 Hooks 是從元件中移除可重複使用功能的有效工具。它們支援程式碼中的 DRY(不要重複)、可維護性和整潔性。但開發有用的自訂鉤子需要牢牢掌握 React 的基本想法和推薦程式。在這篇文章中,我們將討論在 React 中開發自訂鉤子的一些最佳策略,並舉例說明如何有效地應用它們。 ...
    程式設計 發佈於2024-11-07
  • 如何解決 PHPMailer 中的 HTML 渲染問題?
    如何解決 PHPMailer 中的 HTML 渲染問題?
    PHPmailer的HTML渲染問題及其解決方法在PHPmailer中,當嘗試發送HTML格式的電子郵件時,用戶可能會遇到一個意想不到的問題:顯示實際的HTML程式碼在電子郵件正文中而不是預期內容。為了有效地解決這個問題,方法呼叫的特定順序至關重要。 正確的順序包括在呼叫 isHTML() 方法之前...
    程式設計 發佈於2024-11-07
  • 透過 REST API 上的 GraphQL 增強 React 應用程式
    透過 REST API 上的 GraphQL 增強 React 應用程式
    In the rapidly changing world of web development, optimizing and scaling applications is always an issue. React.js had an extraordinary success for fr...
    程式設計 發佈於2024-11-07
  • 為什麼我的登入表單無法連線到我的資料庫?
    為什麼我的登入表單無法連線到我的資料庫?
    登入表單的資料庫連線問題儘管結合使用PHP 和MySQL 以及HTML 和Dreamweaver,您仍無法建立正確的資料庫連線問題。登入表單和資料庫之間的連線。缺少錯誤訊息可能會產生誤導,因為登入嘗試仍然不成功。 連接失敗的原因:資料庫憑證不正確: 確保用於連接資料庫的主機名稱、資料庫名稱、用戶名和...
    程式設計 發佈於2024-11-07
  • 為什麼嵌套絕對定位會導致元素引用其父級而不是祖父母?
    為什麼嵌套絕對定位會導致元素引用其父級而不是祖父母?
    嵌套定位:絕對內的絕對嵌套的絕對定位元素可能會在 CSS 中表現出意想不到的行為。考慮這種情況:第一個div (#1st) 位置:相對第二個div (#2nd) 相對於#1st 絕對定位A第三個div(#3rd)絕對定位在#2nd內問:為什麼#3rd相對於#2nd而不是#1st絕對定位? A: 因為...
    程式設計 發佈於2024-11-07
  • 如何有效率地從字串中剝離特定文字?
    如何有效率地從字串中剝離特定文字?
    高效剝離字串:如何刪除特定文字片段遇到操作字串值的需求是程式設計中的常見任務。經常面臨的一項特殊挑戰是刪除特定文字片段,同時保留特定部分。在本文中,我們將深入研究此問題的實用解決方案。 考慮這樣一個場景,您有一個字串“data-123”,您的目標是消除“data-”前綴,只留下“123”值。為了實現...
    程式設計 發佈於2024-11-07
  • 如何將通訊錄與手機同步?在 Go 中實現 CardDAV!
    如何將通訊錄與手機同步?在 Go 中實現 CardDAV!
    假設您協助管理小型組織或俱樂部,並擁有一個儲存所有會員詳細資料(姓名、電話、電子郵件...)的資料庫。 在您需要的任何地方都可以存取這些最新資訊不是很好嗎?好吧,有了 CardDAV,你就可以! CardDAV 是一個經過良好支援的聯絡人管理開放標準;它在 iOS 聯絡人應用程式和許多適用於 A...
    程式設計 發佈於2024-11-07
  • C/C++ 開發的最佳編譯器警告等級是多少?
    C/C++ 開發的最佳編譯器警告等級是多少?
    C/C 開發的最佳編譯器警告等級編譯器在檢測程式碼中的潛在問題方面發揮著至關重要的作用。透過利用適當的警告級別,您可以儘早識別並解決漏洞或編碼錯誤。本文探討了各種 C/C 編譯器的建議警告級別,以提高程式碼品質。 GCC 和 G 對於 GCC 和 G,廣泛推薦的警告等級是「-牆」。此選項會啟動一組全...
    程式設計 發佈於2024-11-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3