資料擷取是 React 應用程式的基礎,支援載入使用者資料、動態渲染內容等功能。 React 提供了一個靈活的資料處理生態系統,可以根據應用程式的複雜性和效能需求選擇各種函式庫和方法。在本文中,我們將探討 React 中資料取得的幾個關鍵方法,包括 Fetch API、Axios、Async/Await、React Query、SWR 和 GraphQL。
Fetch API 是一個內建的 Web API,它使網路請求更加簡單,並受到現代瀏覽器的廣泛支援。它傳回一個 Promise,該 Promise 使用表示 API 請求中的資料的 Response 物件進行解析。
import React, { useEffect, useState } from 'react'; const FetchExample = () => { const [data, setData] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchData = async () => { try { const response = await fetch('https://jsonplaceholder.typicode.com/posts'); if (!response.ok) throw new Error('Network response was not ok'); const data = await response.json(); setData(data); } catch (error) { setError(error.message); } finally { setLoading(false); } }; fetchData(); }, []); return ( <div> {loading ? <p>Loading...</p> : data.map((item) => <p key={item.id}>{item.title}</p>)} {error && <p>Error: {error}</p>} </div> ); };
Axios 是一個基於 Promise 的 HTTP 用戶端,適用於瀏覽器和 Node.js,它提供比 Fetch API 更多的功能,例如請求和回應攔截器以及轉換請求和回應的能力。
import React, { useEffect, useState } from 'react'; import axios from 'axios'; const AxiosExample = () => { const [data, setData] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { axios .get('https://jsonplaceholder.typicode.com/posts') .then((response) => { setData(response.data); setLoading(false); }) .catch((error) => { setError(error.message); setLoading(false); }); }, []); return ( <div> {loading ? <p>Loading...</p> : data.map((item) => <p key={item.id}>{item.title}</p>)} {error && <p>Error: {error}</p>} </div> ); };
使用 async 和await,在 JavaScript 中處理非同步程式碼變得更加清晰。 Fetch API 和 Axios 都可以使用 async/await 語法,讓程式碼更容易閱讀。
const fetchData = async () => { try { const response = await fetch('https://jsonplaceholder.typicode.com/posts'); const data = await response.json(); setData(data); } catch (error) { console.error('Error fetching data:', error); } };
React Query 處理伺服器狀態的快取、同步和更新,讓您輕鬆取得、更新和快取資料。 React Query 的自動資料快取和重新取得使其成為複雜應用程式的流行選擇。
import React, { useEffect, useState } from 'react'; const FetchExample = () => { const [data, setData] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchData = async () => { try { const response = await fetch('https://jsonplaceholder.typicode.com/posts'); if (!response.ok) throw new Error('Network response was not ok'); const data = await response.json(); setData(data); } catch (error) { setError(error.message); } finally { setLoading(false); } }; fetchData(); }, []); return ( <div> {loading ? <p>Loading...</p> : data.map((item) => <p key={item.id}>{item.title}</p>)} {error && <p>Error: {error}</p>} </div> ); };
SWR 是另一個資料取得庫,它優先考慮快取和重新驗證策略。 SWR 由 Vercel 開發,每當用戶重新訪問頁面時,它都會在後台自動重新獲取數據,從而保持數據最新。
import React, { useEffect, useState } from 'react'; import axios from 'axios'; const AxiosExample = () => { const [data, setData] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { axios .get('https://jsonplaceholder.typicode.com/posts') .then((response) => { setData(response.data); setLoading(false); }) .catch((error) => { setError(error.message); setLoading(false); }); }, []); return ( <div> {loading ? <p>Loading...</p> : data.map((item) => <p key={item.id}>{item.title}</p>)} {error && <p>Error: {error}</p>} </div> ); };
GraphQL 是一種 API 查詢語言,可以更好地控制傳回的資料。它允許您僅獲取所需的字段,這可以透過減少過度獲取或獲取不足來提高效能。
要開始使用 Apollo Client,請透過執行 npm install @apollo/client graphql 來安裝它。
const fetchData = async () => { try { const response = await fetch('https://jsonplaceholder.typicode.com/posts'); const data = await response.json(); setData(data); } catch (error) { console.error('Error fetching data:', error); } };
在 React 中選擇正確的資料擷取方法取決於您專案的複雜性、效能需求以及您對程式庫和工具的偏好。這是一個快速總結:
以上是React 中的資料獲取的詳細內容。更多資訊請關注PHP中文網其他相關文章!