」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何使用 React Query 設定 Expo React Native 項目

如何使用 React Query 設定 Expo React Native 項目

發佈於2024-10-31
瀏覽:595

How to Set Up an Expo React Native Project with React Query

與外部 API 互動通常是必不可少的,React Query 允許您專注於資料而不是獲取資料的複雜性,從而簡化了這一點。本指南將引導您使用 Expo 設定 React Native 專案並將其與 React Query 整合。

第 1 步:設定您的世博項目

首先,安裝 Expo CLI 並建立新專案。如果您已有項目,請跳至下一步。

  • 安裝 Expo CLI
  npm install -g expo-cli
  • 創建一個新專案
  expo init my-react-native-query-app

根據您的需求選擇範本。

第 2 步:安裝 React 查詢和依賴項

React Query 對於管理 React Native 應用程式中的伺服器狀態非常強大。

  • 安裝 React Query
  npm install @tanstack/react-query
  • 安裝附加相依性
  npx expo install @react-native-community/netinfo

第 3 步:建立輔助函數

在專案根目錄的 hooks 資料夾中建立三個自訂掛鉤。

  1. useAppState.ts
   import NetInfo from '@react-native-community/netinfo';
   import { onlineManager } from '@tanstack/react-query';

   onlineManager.setEventListener((setOnline) => {
     return NetInfo.addEventListener((state) => {
       setOnline(!!state.isConnected);
     });
   });

這會在應用程式重新連接到互聯網時啟用自動重新獲取。

  1. UseOnlineManager.ts
   import { useEffect } from 'react';
   import { AppState, Platform } from 'react-native';
   import { focusManager } from '@tanstack/react-query';

   function onAppStateChange(status: AppStateStatus) {
     if (Platform.OS !== 'web') {
       focusManager.setFocused(status === 'active');
     }
   }

   useEffect(() => {
     const subscription = AppState.addEventListener('change', onAppStateChange);
     return () => subscription.remove();
   }, []);

這會在應用程式處於活動狀態時更新應用程式狀態。

  1. useRefreshOnFocus.ts
   import React from 'react';
   import { useFocusEffect } from '@react-navigation/native';

   export function useRefreshOnFocus(refetch: () => Promise) {
     const firstTimeRef = React.useRef(true);

     useFocusEffect(
       React.useCallback(() => {
         if (firstTimeRef.current) {
           firstTimeRef.current = false;
           return;
         }

         refetch();
       }, [refetch]),
     );
   }

當螢幕聚焦時,此自訂掛鉤會觸發重新擷取。

第四步:實現根文件中的函數

在您的主路線文件中,設定以下內容:

import {
  QueryClient,
  QueryClientProvider,
  focusManager,
} from "@tanstack/react-query";
import { AppStateStatus, Platform } from "react-native";
import { useOnlineManager } from "@/hooks/query/useOnlineManager";
import { useAppState } from "@/hooks/query/useAppState";

export default function RootLayout() {
  function onAppStateChange(status: AppStateStatus) {
    if (Platform.OS !== "web") {
      focusManager.setFocused(status === "active");
    }
  }

  const queryClient = new QueryClient({
    defaultOptions: { queries: { retry: 2 } },
  });

  useOnlineManager();
  useAppState(onAppStateChange);

  return (
    
      {Rest of your project}
    
  );
}

第 5 步:啟動您的開發伺服器

導航至您的專案目錄並啟動 Expo 開發伺服器:

expo start

Expo 允許透過 Expo Go 應用程式或建置開發應用程式進行快速測試。有關創建開發版本的更多詳細信息,請參閱 Expo 的文檔。

結論

使用 React Query 設定 Expo React Native 專案可以簡化狀態管理和 API 互動。透過利用 React Query 的強大功能(例如快取和後台更新),您可以更專注於數據,而不是複雜的獲取數據。

快樂編碼! ??‍? ??‍? ?

版本聲明 本文轉載於:https://dev.to/hokagedemehin/how-to-set-up-an-expo-react-native-project-with-react-query-3oeb?1如有侵犯,請聯絡study_golang@163 .com刪除
最新教學 更多>
  • 使用 Jsoup 將 HTML 轉換為純文字時如何保留換行符號?
    使用 Jsoup 將 HTML 轉換為純文字時如何保留換行符號?
    使用Jsoup 的Html 到純文字轉換保留換行符Jsoup 提供了強大的HTML 操作工具,但其預設從HTML 到純文字的轉換文字可以合併換行符,將它們呈現為連續文字。要保留這些換行符,請按以下方式使用Jsoup:用於保留換行符的自訂函數:提供的Java 程式碼片段引入了一個自訂函數noTags,...
    程式設計 發佈於2024-11-07
  • 如何在 C++ 中建立自訂輸入流以從非標準來源讀取資料?
    如何在 C++ 中建立自訂輸入流以從非標準來源讀取資料?
    在C 中建立自訂輸入流C 中的自訂輸入流提供了從非標準來源讀取資料的強大機制。雖然直接擴展 istream 類別似乎是可行的選擇,但建議探索其他方法以確保高效可靠的實作。 從streambuf派生首選方法在 C 中建立自訂流的方法是從 std::streambuf 基底類別派生自訂的 Streamb...
    程式設計 發佈於2024-11-07
  • SharpAPI Laravel 整合指南
    SharpAPI Laravel 整合指南
    Welcome to the SharpAPI Laravel Integration Guide! This repository provides a comprehensive, step-by-step tutorial on how to integrate SharpAPI into y...
    程式設計 發佈於2024-11-07
  • 如何將 Firebase 與 Laravel 集成
    如何將 Firebase 與 Laravel 集成
    Laravel and Firebase are two powerful tools that can significantly enhance the development of modern web applications. Laravel, a popular PHP framewor...
    程式設計 發佈於2024-11-07
  • Expo with Redux Toolkit、檔案系統與 Redux Persist:綜合指南
    Expo with Redux Toolkit、檔案系統與 Redux Persist:綜合指南
    Redux Toolkit 是一個流行的函式庫,它透過提供一組實用程式和約定來簡化 Redux 開發。它包括一個減速器和動作創建模式,可以簡化編寫 Redux 邏輯的過程。將 Redux Persist 與 Redux Toolkit 結合可以顯著提高 React Native 應用程式中狀態管理的...
    程式設計 發佈於2024-11-07
  • 如何處理非巢狀 Lambda 閉包中的變數作用域問題?
    如何處理非巢狀 Lambda 閉包中的變數作用域問題?
    Python Lambda 閉包作用域問題將變數封裝在閉包中以將其從函數簽章中刪除是一種常用於高效代碼結構的技術。但是,在非嵌套 lambda 的情況下,閉包保留變數的最終值,從而在嘗試基於迭代變數存取特定值時導致問題。 考慮提供的程式碼片段:names = ['a', 'b', 'c'] def ...
    程式設計 發佈於2024-11-07
  • 如何使用現代 CSS 將按鈕無縫整合到輸入欄位中?
    如何使用現代 CSS 將按鈕無縫整合到輸入欄位中?
    如何使用現代CSS 將按鈕整合到輸入中問題:創建視覺元素其中按鈕無縫整合在輸入欄位中,允許正常的使用者互動、保留文字可見性並保持可存取性和螢幕閱讀器相容性。 解決方案:Flexbox 和表單邊框最佳方法是使用彈性盒佈局以及包含元素(表單)上的邊框:定位:設定具有水平行佈局的彈性盒,允許輸入擴展以填充...
    程式設計 發佈於2024-11-07
  • 核心開發中的 C++:綜合指南
    核心開發中的 C++:綜合指南
    介紹 由於直接硬體存取和最小的運行時開銷,核心開發傳統上是 C 的領域。然而,由於其物件導向的特性,C 在核心程式設計中找到了自己的位置,這可以帶來更乾淨、更易於維護的程式碼。本指南將逐步介紹如何使用 C 進行核心開發,重點是設定環境、建置專案以及使用 C 功能編寫核心程式碼,同時...
    程式設計 發佈於2024-11-07
  • 在 React 專案中實作 CSS 模組
    在 React 專案中實作 CSS 模組
    React 中的 CSS 模組是一種透過自動產生唯一類別名稱來確定 CSS 範圍的方法。這可以防止大型應用程式中的類別名稱衝突並允許模組化樣式。以下是如何在 React 專案中使用 CSS 模組: 1. 設定 預設情況下,React 支援 CSS 模組。您只需使用擴展名 .modul...
    程式設計 發佈於2024-11-07
  • 有哪些資源可用於實現彗星模式?
    有哪些資源可用於實現彗星模式?
    Comet:伺服器推送模式伺服器推送是一種在伺服器和Web 用戶端之間實現雙向通訊的技術,已經獲得了顯著的成果最近的興趣。 Comet 設計模式是作為在 JavaScript 應用程式中實現伺服器推送的一種有前途的方法而出現。本問題探討了 Comet 模式的 jQuery 實作和通用資源的可用性。 ...
    程式設計 發佈於2024-11-07
  • 探索心理健康門診計畫的類型
    探索心理健康門診計畫的類型
    門診心理健康治療方法是一種不強調在醫療機構過夜的方案。這種療法主要在醫生辦公室、醫院或診所提供,在那裡人們可以進行定期治療,以進行高度結構化的定期治療。 在 COVID-19 大流行期間,全球約有 2.75 億名吸毒者。比前幾十年高出近 22%。吸毒成癮的增加導致全美吸毒過量人數創下歷史新高。好消...
    程式設計 發佈於2024-11-07
  • 如何在 C++ Builder 中初始化 OpenGL 幀:逐步指南
    如何在 C++ Builder 中初始化 OpenGL 幀:逐步指南
    如何在C Builder 中初始化OpenGL 幀在C Builder 中的窗體內初始化OpenGL 幀可能是一項具有挑戰性的任務。在嘗試調整現有 OpenGL 程式碼(例如問題中提供的範例)時,您可能會遇到困難。 要正確建立和渲染OpenGL 幀,請依照下列步驟操作:使用TForm::Handle...
    程式設計 發佈於2024-11-07
  • 利用這些罕見的 HTML 屬性來增強您的 Web 開發技能
    利用這些罕見的 HTML 屬性來增強您的 Web 開發技能
    Introduction HTML attributes are most often referred to as the overlooked heroes of web development, playing a crucial role in shaping the st...
    程式設計 發佈於2024-11-07
  • 如何在 Python 中將字串轉換為二進位:ASCII 與 Unicode?
    如何在 Python 中將字串轉換為二進位:ASCII 與 Unicode?
    在Python中將字串轉換為二進位在Python中,您可能會遇到需要將字串表示為二進位數字序列的情況。這對於多種原因都很有用,例如資料加密或二進位檔案操作。 使用 bin() 函數將字串轉換為二進位的最簡單方法就是使用bin()函數。該函數接受一個字串作為輸入,並將其二進位表示形式傳回為字串。例如:...
    程式設計 發佈於2024-11-07
  • 為什麼從 Java 中的匿名內部類別存取外部實例變數需要是 Final?
    為什麼從 Java 中的匿名內部類別存取外部實例變數需要是 Final?
    Java內部類別:為什麼必須使用「最終」外部實例變數在Java中定義匿名內部類別時,您可能會遇到將外部實例變數標記為“final”的要求。本文探討了這個約束背後的原因。 如同提供的程式碼中所提到的,實例變數 jtfContent 必須宣告為 Final 才能在內部類別中存取。這項要求源自於 Java...
    程式設計 發佈於2024-11-07

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

Copyright© 2022 湘ICP备2022001581号-3