建立React Native 應用程式時,管理載入狀態和資料可能會變得複雜,特別是如果您想將API 邏輯集中在Redux 中,但又要保持對臨時狀態的組件級控制,例如裝載機。在這裡,我們將探索一種利用 Redux 進行 API 呼叫的方法,同時保持元件內的載入和資料狀態隔離,使 UI 獨立且可重複使用。
這種方法在以下情況下特別有用:
讓我們深入了解如何設定。
使用 Redux Toolkit 中的 createAsyncThunk,我們可以定義一個 thunk 來進行 API 呼叫。該函數傳回一個承諾,允許元件知道呼叫何時完成並相應地處理載入器。
dataSlice.js
import { createSlice, createAsyncThunk } from '@reduxjs/toolkit'; // Define an async thunk for the API call export const fetchData = createAsyncThunk('data/fetchData', async () => { const response = await fetch('https://api.example.com/data'); // Replace with your API const data = await response.json(); return data; // Returns the fetched data to the action payload }); const dataSlice = createSlice({ name: 'data', initialState: { items: [], }, reducers: {}, extraReducers: (builder) => { builder .addCase(fetchData.fulfilled, (state, action) => { state.items = action.payload; // This saves the data in Redux if needed elsewhere }); }, }); export default dataSlice.reducer;
這是發生的事情:
該元件可以在本地處理載入和資料狀態,提供對載入指示器的控制並僅在該元件內顯示資料。
MyComponent.js
import React, { useState } from 'react'; import { View, ActivityIndicator, Text, Button } from 'react-native'; import { useDispatch } from 'react-redux'; import { fetchData } from './dataSlice'; const MyComponent = () => { const [loading, setLoading] = useState(false); // Local loading state const [data, setData] = useState([]); // Local data state const dispatch = useDispatch(); const handleFetchData = async () => { setLoading(true); // Start the local loader try { const resultAction = await dispatch(fetchData()); // Dispatch Redux action if (fetchData.fulfilled.match(resultAction)) { setData(resultAction.payload); // Set the data locally in the component } } catch (error) { console.error('Error fetching data:', error); } finally { setLoading(false); // Stop the loader after API call completes } }; return ( <View> {loading ? ( <ActivityIndicator size="large" color="#0000ff" /> ) : ( data.map((item, index) => <Text key={index}>{item.name}</Text>) // Adjust based on data structure )} <Button title="Reload Data" onPress={handleFetchData} /> </View> ); }; export default MyComponent;
載入器和資料的本機狀態:
調度 Redux Action:
顯示載入器和資料:
這種方法平衡了 Redux 的功能與本地元件管理,使其高度模組化和靈活:
該技術提供了一種乾淨、模組化的方式來使用 Redux 管理 API 調用,同時保持每個元件中 UI 的回應能力和隔離性。透過利用基於承諾的操作和本機狀態,您可以控制臨時 UI 狀態,並且仍然保持 API 邏輯集中,從而使您的程式碼庫更具可維護性和可擴展性。
嘗試在需要集中式 API 處理和獨立 UI 控制的專案中實現此方法 - 這是結合 Redux 和 React 本機狀態管理最佳功能的好方法!
以上是使用 Redux 處理 React Native 中 API 呼叫的特定於元件的載入和資料狀態的詳細內容。更多資訊請關注PHP中文網其他相關文章!