ReactでAxiosを使用したデータのフェッチについてのReact Hookの活用方法


  1. useStateとuseEffectを使用する方法:

    import React, { useState, useEffect } from 'react';
    import axios from 'axios';
    const MyComponent = () => {
    const [data, setData] = useState(null);
    useEffect(() => {
    const fetchData = async () => {
      try {
        const response = await axios.get('https://api.example.com/data');
        setData(response.data);
      } catch (error) {
        console.error('データのフェッチに失敗しました', error);
      }
    };
    fetchData();
    }, []);
    return (
    <div>
      {/* データの表示 */}
      {data ? <p>{data}</p> : <p>データをロード中です...</p>}
    </div>
    );
    };
    export default MyComponent;
  2. useReducerを使用する方法:

    import React, { useReducer, useEffect } from 'react';
    import axios from 'axios';
    const initialState = {
    loading: true,
    error: null,
    data: null,
    };
    const reducer = (state, action) => {
    switch (action.type) {
    case 'FETCH_SUCCESS':
      return { loading: false, error: null, data: action.payload };
    case 'FETCH_ERROR':
      return { loading: false, error: action.payload, data: null };
    default:
      return state;
    }
    };
    const MyComponent = () => {
    const [state, dispatch] = useReducer(reducer, initialState);
    useEffect(() => {
    const fetchData = async () => {
      try {
        const response = await axios.get('https://api.example.com/data');
        dispatch({ type: 'FETCH_SUCCESS', payload: response.data });
      } catch (error) {
        dispatch({ type: 'FETCH_ERROR', payload: error.message });
      }
    };
    fetchData();
    }, []);
    return (
    <div>
      {/* データの表示 */}
      {state.loading ? (
        <p>データをロード中です...</p>
      ) : state.error ? (
        <p>データのフェッチに失敗しました: {state.error}</p>
      ) : (
        <p>{state.data}</p>
      )}
    </div>
    );
    };
    export default MyComponent;
  3. カスタムHookを使用する方法:

    import React, { useEffect } from 'react';
    import axios from 'axios';
    const useDataFetching = (url) => {
    const [data, setData] = useState(null);
    const [loading, setLoading] = useState(true);
    const [error, setError] = useState(null);
    useEffect(() => {
    const fetchData = async () => {
      try {
        const response = await axios.get(url);
        setData(response.data);
        setLoading(false);
      } catch (error) {
        setError(error.message);
        setLoading(false);
      }
    };
    fetchData();
    }, [url]);
    return { data, loading, error };
    };
    const MyComponent = () => {
    const { data, loading, error } = useDataFetching('https://api.example.com/data');
    return (
    <div>
      {/* データの表示 */}
      {loading ? (
        <p>データをロード中です...</p>
      ) : error ? (
        <p>データのフェッチに失敗しました: {error}</p>
      ) : (
        <p>{data}</p>
      )}
    </div>
    );
    };
    export default MyComponent;

これらのコード例は、ReactでAxiosを使用してデータをフェッチするためのいくつかの一般的な方法を示しています。適切な方法を選択し、プロジェクトの要件に合わせてカスタマイズしてください。