React では、関数コンポーネントで副作用を実行するために useEffect フックがよく使用されます。 API またはサーバーからのデータの取得は、最も一般的な副作用の 1 つであり、useEffect を使用すると、コンポーネントでのデータの取得を簡単に管理できます。以下は、useEffect を使用して React 関数コンポーネントでデータをフェッチする方法の詳細な説明と例です。
useEffect を使用してデータをフェッチするには、通常、次のパターンを使用します。
useEffect と useState を使用して API からデータをフェッチする方法を示す例を次に示します。
import React, { useState, useEffect } from 'react'; const DataFetchingComponent = () => { // State variables to store data, loading status, and errors const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); // Using useEffect to fetch data useEffect(() => { // Define the function for fetching data const fetchData = async () => { try { // Start by setting loading state to true setLoading(true); // Make the fetch request const response = await fetch('https://api.example.com/data'); // Check if the response is ok (status code 200-299) if (!response.ok) { throw new Error('Network response was not ok'); } // Parse the JSON data const result = await response.json(); // Update the state with the fetched data setData(result); } catch (error) { // Handle errors and set the error state setError(error.message); } finally { // Set loading to false once the request is complete setLoading(false); } }; // Call the fetchData function fetchData(); }, []); // Empty dependency array means this effect runs once when the component mounts // Conditionally render the UI based on loading, error, and data if (loading) { return <div>Loading...</div>; } if (error) { return <div>Error: {error}</div>; } return ( <div> <h1>Data Fetching Example</h1> <ul> {data.map(item => ( <li key={item.id}>{item.name}</li> ))} </ul> </div> ); }; export default DataFetchingComponent;
状態変数:
useEffect フック:
ロードとエラー処理:
使用中の非同期関数Effect:
空の依存関係配列 ([]):
エラー処理:
状態管理:
場合によっては、コンポーネントのマウント時にデータをフェッチするのではなく、ボタンのクリックなどのユーザー操作に基づいてデータをフェッチしたい場合があります。この場合、イベント ハンドラーから状態変数を更新することで useEffect をトリガーできます。
import React, { useState, useEffect } from 'react'; const DataFetchingComponent = () => { // State variables to store data, loading status, and errors const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); // Using useEffect to fetch data useEffect(() => { // Define the function for fetching data const fetchData = async () => { try { // Start by setting loading state to true setLoading(true); // Make the fetch request const response = await fetch('https://api.example.com/data'); // Check if the response is ok (status code 200-299) if (!response.ok) { throw new Error('Network response was not ok'); } // Parse the JSON data const result = await response.json(); // Update the state with the fetched data setData(result); } catch (error) { // Handle errors and set the error state setError(error.message); } finally { // Set loading to false once the request is complete setLoading(false); } }; // Call the fetchData function fetchData(); }, []); // Empty dependency array means this effect runs once when the component mounts // Conditionally render the UI based on loading, error, and data if (loading) { return <div>Loading...</div>; } if (error) { return <div>Error: {error}</div>; } return ( <div> <h1>Data Fetching Example</h1> <ul> {data.map(item => ( <li key={item.id}>{item.name}</li> ))} </ul> </div> ); }; export default DataFetchingComponent;
この例では:
React でデータを取得するために useEffect を使用することは、副作用を管理する効率的でクリーンな方法です。 useState と組み合わせることで、機能コンポーネントでのデータのフェッチ、状態のロード、およびエラー処理を管理できます。アプリが優れたユーザー エクスペリエンスを提供できるように、常にエラーや特殊なケースに対処することを忘れないでください。
以上がReact で useEffect を使用してデータを取得するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。