إجراء طلبات GET باستخدام Axios
ثبّت Axios، وأجرِ طلب GET إلى API عامة داخل useEffect، وخزّن الاستجابة في الحالة، واعرض البيانات المسترجعة في FlatList.
إجراء طلبات GET باستخدام Axios درس مجاني في React Native Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Native Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Native Academy 4 دروس في المجموع.
بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.
Why Axios Over Fetch?
fetch is built into React Native but requires boilerplate: manually calling .json(), checking response.ok for HTTP errors, and handling timeouts. Axios is an HTTP client library that automatically parses JSON responses, throws on HTTP error status codes, supports request timeouts natively, and provides a clean interceptor API for global headers and error handling.
Installing Axios
Add Axios to your project with npm or yarn. It has no native dependencies, so no additional linking steps are required for either Expo or bare React Native projects.
npm install axios
# or
yarn add axiosYour First GET Request
Call axios.get(url) to make a GET request. It returns a Promise that resolves to a response object. The response body is already parsed as JSON and available on response.data. You do not need to call .json() as you would with fetch.
import axios from 'axios';
axios.get('https://jsonplaceholder.typicode.com/posts')
.then((response) => {
console.log(response.data); // parsed JSON array
})
.catch((error) => {
console.error(error.message);
});Axios GET Inside useEffect
Combine Axios with useEffect to fetch data when the component mounts. Store the response data in state with useState. Handle errors and show a loading indicator while the request is in flight. The empty dependency array ensures the fetch only happens once on mount.
function PostsScreen() {
const [posts, setPosts] = useState([]);
const [loading, setLoading] = useState(true);
useEffect(() => {
axios.get('https://jsonplaceholder.typicode.com/posts')
.then((res) => setPosts(res.data))
.catch((err) => console.error(err))
.finally(() => setLoading(false));
}, []);
if (loading) return <ActivityIndicator />;
return <FlatList data={posts} keyExtractor={(p) => String(p.id)} renderItem={({ item }) => <Text>{item.title}</Text>} />;
}Async/Await with Axios
Axios works naturally with async/await. Define an async function inside the useEffect callback, call it immediately, and wrap the Axios call in a try/catch block. Do not make the useEffect callback itself async — instead, define the async function inside and call it.
useEffect(() => {
const fetchPosts = async () => {
try {
const response = await axios.get('/posts');
setPosts(response.data);
} catch (error) {
setError(error.message);
} finally {
setLoading(false);
}
};
fetchPosts();
}, []);Creating an Axios Instance
Create a shared Axios instance with a baseURL and default headers. Every request made with this instance automatically uses these defaults. This avoids repeating the full URL in every component and makes it easy to update the base URL or add an authorization header in one place.
// api/client.js
import axios from 'axios';
const client = axios.create({
baseURL: 'https://api.myapp.com/v1',
timeout: 10000,
headers: { 'Content-Type': 'application/json' },
});
export default client;
// Usage: just the path
client.get('/posts') // → GET https://api.myapp.com/v1/postsSending Query Parameters
Pass query string parameters via the params option in the Axios config object. Axios serializes the params object and appends them to the URL automatically. This is cleaner than manually building query strings and URL-encoding values.
// Request: GET /posts?userId=1&_limit=5
const response = await axios.get('/posts', {
params: {
userId: 1,
_limit: 5,
},
});
console.log(response.data); // array of up to 5 posts by userId 1Adding Authorization Headers
Attach a bearer token to requests either globally via an Axios instance default or per-request via the config object. Use Axios request interceptors to automatically attach a token stored in AsyncStorage or an auth context without modifying every individual request.
// Per-request
axios.get('/user/profile', {
headers: { Authorization: 'Bearer ' + token },
});
// Global via interceptor
client.interceptors.request.use((config) => {
config.headers.Authorization = 'Bearer ' + getToken();
return config;
});Reading the Response Structure
Every Axios response object has a consistent shape: data for the parsed response body, status for the HTTP status code, statusText, and headers. Unlike fetch, Axios automatically throws an error for 4xx and 5xx status codes, so the .catch or try/catch handles both network errors and HTTP errors.
const response = await axios.get('/posts/1');
console.log(response.data); // { id: 1, title: '...' }
console.log(response.status); // 200
console.log(response.headers); // { 'content-type': 'application/json' }Cancelling Axios Requests
To cancel an Axios request in the useEffect cleanup function, pass an AbortController signal (Axios supports this natively from v0.22+). When the component unmounts, call controller.abort() to cancel any in-flight request and prevent state updates on unmounted components.
useEffect(() => {
const controller = new AbortController();
axios.get('/posts', { signal: controller.signal })
.then((res) => setPosts(res.data))
.catch((err) => {
if (!axios.isCancel(err)) setError(err.message);
});
return () => controller.abort();
}, []);Rendering Fetched Data in FlatList
Once data is stored in state, pass it directly to FlatList's data prop. Because the state update triggers a re-render, the FlatList automatically shows the new data. This one-way data flow — fetch → state → render — is the core React pattern for data display.
return (
<FlatList
data={posts}
keyExtractor={(item) => String(item.id)}
renderItem={({ item }) => (
<View style={styles.row}>
<Text style={styles.title}>{item.title}</Text>
<Text style={styles.body} numberOfLines={2}>{item.body}</Text>
</View>
)}
/>
);Quick Check
Test your understanding of making GET requests with Axios from this lesson.
Lesson Recap
In this lesson you learned: axios.get returns a Promise that resolves to response.data as parsed JSON, create an Axios instance with a baseURL and default headers for reuse across components, and pass an AbortController signal to cancel in-flight requests in useEffect cleanup. Next up we handle loading and error states for a polished user experience.
الأسئلة الشائعة
هل درس «إجراء طلبات GET باستخدام Axios» مجاني؟
نعم — نص درس «إجراء طلبات GET باستخدام Axios» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Native Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Native Academy 4 دروس في المجموع.
ماذا ستتعلم في «إجراء طلبات GET باستخدام Axios»؟
ثبّت Axios، وأجرِ طلب GET إلى API عامة داخل useEffect، وخزّن الاستجابة في الحالة، واعرض البيانات المسترجعة في FlatList. تتمرن على React Native Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ React Native Academy؟
لا تُشترط خبرة سابقة. React Native Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «إجراء طلبات GET باستخدام Axios»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس React Native Academy هذا؟
نعم. كل درس في React Native Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- useEffect ومصفوفات التبعيات
- إجراء طلبات GET باستخدام Axios
- التعامل مع حالتي التحميل والخطأ
- POST وPUT وDELETE باستخدام Axios