使用NPM

2025-03-29T12:37:13+08:00 | 4分钟阅读 | 更新于 2025-03-29T12:37:13+08:00

Macro Zhao

如何使用React和Axios高效获取数据

推荐超级课程:

@TOC

大家好,欢迎来到我的博客。在这篇React JS教程中,我们将学习什么是axios,如何将它与React Js结合起来向后端发起API调用。然后我们将通过代码示例来演示如何执行GET、POST、PUT和DELETE请求。

什么是Axios

Axios是一个基于promise的HTTP客户端库,用于在React JS应用程序中发起API调用。使用Axios,您可以执行所有类型的REST API请求调用,如get、post、put和delete。它提供了一种更清晰、更直观的方式来获取API,用于以下任务:

  • 从服务器获取数据
  • 向服务器发送数据
  • 处理响应

安装Axios

我们可以使用npm或yarn将Axios安装到我们的React应用中:

# 使用NPM
npm install axios

# 使用yarn
yarn add axios

使用Axios发起GET请求

GET HTTP请求用于从服务器检索数据,Axios提供了一种简单的方式来执行HTTP GET操作。

HTTP GET流程图

sequenceDiagram
    participant Client
    participant Server
    participant API

    Client->>Server: 发送HTTP GET请求
    Server->>API: 处理请求
    API-->>Server: 返回数据
    Server-->>Client: 返回HTTP响应

Axios HTTP GET示例

import React, { useState, useEffect } from 'react';
import axios from 'axios';

function App() {
  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('https://jsonplaceholder.typicode.com/posts');
        setData(response.data);
      } catch (error) {
        setError(error);
      } finally {
        setLoading(false);
      }
    };

    fetchData();
  }, []);

  return (
    <div>
      <h1>使用Axios在React中发起HTTP GET请求的示例</h1>
      {loading ? (
        <p>加载中...</p>
      ) : error ? (
        <p>错误:{error.message}</p>
      ) : (
        <div>
          <h2>数据:</h2>
          <pre>{JSON.stringify(data, null, 2)}</pre>
        </div>
      )}
    </div>
  );
}
export default App;

使用Axios发起POST请求

HTTP POST请求用于向服务器发送数据,Axios提供了一种简单的方式来执行HTTP POST操作。

HTTP POST流程图

sequenceDiagram
    participant Client
    participant Server
    participant API

    Client->>Server: 发送HTTP POST请求
    Server->>API: 处理请求
    API-->>Server: 处理数据
    Server-->>Client: 返回HTTP响应

Axios HTTP POST示例

import React, { useState } from 'react';
import axios from 'axios';

function App() {
  const [formData, setFormData] = useState({
    title: '',
    body: ''
  });

  const handleChange = (e) => {
    const { name, value } = e.target;
    setFormData({
      ...formData,
      [name]: value
    });
  };

  const handleSubmit = async (e) => {
    e.preventDefault();
    try {
      const response = await axios.post('https://jsonplaceholder.typicode.com/posts', formData);
      console.log('响应:', response.data);
      setFormData({
        title: '',
        body: ''
      });
      alert('提交成功!');
    } catch (error) {
      console.error('提交帖子时出错:', error);
      alert('提交帖子时发生了错误。请稍后再试。');
    }
  };

  return (
    <div>
      <h1>使用Axios在React中发起HTTP POST请求的示例</h1>
      <form onSubmit={handleSubmit}>
        <div>
          <label>标题:</label>
          <input
            type="text"
            name="title"
            value={formData.title}
            onChange={handleChange}
            required
          />
        </div>
        <div>
          <label>内容:</label>
          <textarea
            name="body"
            value={formData.body}
            onChange={handleChange}
            required
          />
        </div>
        <button type="submit">提交</button>
      </form>
    </div>
  );
}

export default App;```markdown
import React, { useState, useEffect } from 'react';
import axios from 'axios';

function App() {
  const [updatedData, setUpdatedData] = useState({
    id: 1,
    title: '更新后的标题',
    body: '更新后的内容'
  });

  const [responseData, setResponseData] = useState(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  useEffect(() => {
    const updateData = async () => {
      try {
        const response = await axios.put('https://jsonplaceholder.typicode.com/posts/1', updatedData);
        setResponseData(response.data);
      } catch (error) {
        setError(error);
      } finally {
        setLoading(false);
      }
    };

    updateData();
  }, [updatedData]);

  return (
    <div>
      <h1>在React中使用Axios发起HTTP PUT请求的示例</h1>
      {loading ? (
        <p>加载中...</p>
      ) : error ? (
        <p>错误:{error.message}</p>
      ) : (
        <div>
          <h2>响应数据:</h2>
          <pre>{JSON.stringify(responseData, null, 2)}</pre>
        </div>
      )}
    </div>
  );
}
export default App;

使用Axios发起HTTP DELETE请求

HTTP DELETE请求用于删除数据,Axios提供了一种简单的方法来执行HTTP DELETE操作。

HTTP DELETE流程图

  sequenceDiagram
    participant Client
    participant Server
    participant API

    Client->>Server: 发送HTTP DELETE请求
    Server->>API: 处理请求
    API-->>Server: 删除数据
    Server-->>Client: 返回HTTP响应

Axios HTTP DELETE示例

import React, { useState, useEffect } from 'react';
import axios from 'axios';

function App() {
  const [responseData, setResponseData] = useState(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  useEffect(() => {
    const deleteData = async () => {
      try {
        const response = await axios.delete('https://jsonplaceholder.typicode.com/posts/1');
        setResponseData(response.data);
      } catch (error) {
        setError(error);
      } finally {
        setLoading(false);
      }
    };
    deleteData();
  }, []);

  return (
    <div>
      <h1>在React中使用Axios发起HTTP DELETE请求的示例</h1>
      {loading ? (
        <p>加载中...</p>
      ) : error ? (
        <p>错误:{error.message}</p>
      ) : (
        <div>
          <h2>响应数据:</h2>
          <pre>{JSON.stringify(responseData, null, 2)}</pre>
        </div>
      )}
    </div>
  );
}
export default App;

感谢您阅读我们的博客!我们希望它对您有所帮助并富有兴趣。如果您在阅读中发现了一些有用的信息,我们非常乐意您在社交媒体上传播这些信息。这样,我们可以扩大读者基础,并将宝贵的知识传播给更广泛的人群。再次感谢您的支持!

© 2011 - 2025 Macro Zhao的分享站

关于我

如遇到加载502错误,请尝试刷新😄

Hi,欢迎访问 Macro Zhao 的博客。Macro Zhao(或 Macro)是我在互联网上经常使用的名字。

我是一个热衷于技术探索和分享的IT工程师,在这里我会记录分享一些关于技术、工作和生活上的事情。

我的CSDN博客:
https://macro-zhao.blog.csdn.net/

欢迎你通过评论或者邮件与我交流。
Mail Me

推荐好玩(You'll Like)
  • AI 动·画
    • 这是一款有趣·免费的能让您画的画中的角色动起来的AI工具。
    • 支持几十种动作生成。
我的项目(My Projects)
  • 爱学习网

  • 小乙日语App

    • 这是一个帮助日语学习者学习日语的App。
      (当然初衷也是为了自用😄)
    • 界面干净,简洁,漂亮!
    • 其中包含 N1 + N2 的全部单词和语法。
    • 不需注册,更不需要订阅!完全免费!
  • 小乙日文阅读器

    • 词汇不够?照样能读日语名著!
    • 越读积累越多,积跬步致千里!
    • 哪里不会点哪里!妈妈再也不担心我读不了原版读物了!
赞助我(Sponsor Me)

如果你喜欢我的作品或者发现它们对你有所帮助,可以考虑给我买一杯咖啡 ☕️。这将激励我在未来创作和分享更多的项目和技术。🦾

👉 请我喝一杯咖啡

If you like my works or find them helpful, please consider buying me a cup of coffee ☕️. It inspires me to create and share more projects in the future. 🦾

👉 Buy me a coffee