0Pricing
React Native Academy · 课时

使用 Axios 发起 GET 请求

安装 Axios,在 useEffect 中向公共 API 发起 GET 请求,将响应存入状态,并在 FlatList 中渲染获取的数据。

使用 Axios 发起 GET 请求 是 CoddyKit 上的免费 React Native Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 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 axios

Your 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/posts

Sending 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 1

Adding 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.

常见问题解答

「使用 Axios 发起 GET 请求」课时是免费的吗?

是的 — 「使用 Axios 发起 GET 请求」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Native Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Native Academy 课程共包含 4 节课。

「使用 Axios 发起 GET 请求」这节课中我会学到什么?

安装 Axios,在 useEffect 中向公共 API 发起 GET 请求,将响应存入状态,并在 FlatList 中渲染获取的数据。 你通过在浏览器中直接运行的动手代码来练习 React Native Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 React Native Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 React Native Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「使用 Axios 发起 GET 请求」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 React Native Academy 课中编写并运行代码吗?

能。每节 React Native Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. useEffect 钩子与依赖数组
  2. 使用 Axios 发起 GET 请求
  3. 处理加载与错误状态
  4. 使用 Axios 发送 POST、PUT 与 DELETE 请求
← 返回 React Native Academy