React Native アプリケーションを構築する場合、特に API ロジックを Redux に集中させながら、一時的な状態に対するコンポーネントレベルの制御を維持したい場合、読み込み状態とデータの管理が複雑になることがあります。ローダー。ここでは、読み込みとデータの状態をコンポーネント内で分離し、UI を自己完結型で再利用可能にしながら、API 呼び出しに Redux を活用するアプローチを検討します。
このアプローチは、次のような状況で特に有益です。
これを設定する方法を詳しく見てみましょう。
Redux Toolkit の createAsyncThunk を使用すると、API 呼び出しを行うためのサンクを定義できます。この関数は Promise を返すため、コンポーネントは呼び出しがいつ完了したかを知り、それに応じてローダーを処理できます。
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 アクションをディスパッチしています:
ローダーとデータの表示:
このアプローチは、Redux のパワーとローカルコンポーネント管理のバランスをとり、高度なモジュール化と柔軟性を実現します。
この手法は、UI の応答性を維持し、各コンポーネントで分離された状態を維持しながら、Redux で API 呼び出しを管理するためのクリーンなモジュール式の方法を提供します。 Promise ベースのアクションとローカル状態を活用することで、一時的な UI 状態を制御しながら API ロジックを一元化して、コードベースの保守性と拡張性を高めることができます。
一元的な API 処理と独立した UI 制御が必要なプロジェクトにこのアプローチを実装してみてください。これは、Redux と React のローカル状態管理の利点を組み合わせる優れた方法です。
以上がReact Native での API 呼び出しの Redux によるコンポーネント固有の読み込みとデータ状態の処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。