React技巧之发出http请求

打印 上一主题 下一主题

主题 572|帖子 572|积分 1720

原文链接:https://bobbyhadz.com/blog/react-send-request-on-click
作者:Borislav Hadzhiev
正文从这开始~
总览

在React中,通过点击事件发出http请求:

  • 在元素上设置onClick属性。
  • 每当元素被点击时,发出http请求。
  • 更新state变量,并重新渲染数据。
如果你使用axios,请向下滚动到下一个代码片段。
  1. import {useState} from 'react';
  2. const App = () => {
  3.   const [data, setData] = useState();
  4.   const [isLoading, setIsLoading] = useState(false);
  5.   const [err, setErr] = useState('');
  6.   const handleClick = async () => {
  7.     setIsLoading(true);
  8.     try {
  9.       const response = await fetch('<https://reqres.in/api/users>', {
  10.         method: 'POST',
  11.         body: JSON.stringify({
  12.           name: 'John Smith',
  13.           job: 'manager',
  14.         }),
  15.         headers: {
  16.           'Content-Type': 'application/json',
  17.           Accept: 'application/json',
  18.         },
  19.       });
  20.       if (!response.ok) {
  21.         throw new Error(`Error! status: ${response.status}`);
  22.       }
  23.       const result = await response.json();
  24.       console.log('result is: ', JSON.stringify(result, null, 4));
  25.       setData(result);
  26.     } catch (err) {
  27.       setErr(err.message);
  28.     } finally {
  29.       setIsLoading(false);
  30.     }
  31.   };
  32.   console.log(data);
  33.   return (
  34.    
  35.       {err && <h2>{err}</h2>}
  36.       <button onClick={handleClick}>Make request</button>
  37.       {isLoading && <h2>Loading...</h2>}
  38.       {data && (
  39.         
  40.           <h2>Name: {data.name}</h2>
  41.           <h2>Job: {data.job}</h2>
  42.         
  43.       )}
  44.    
  45.   );
  46. };
  47. export default App;
复制代码

fetch

上述示例向我们展示了,在React中,如何通过点击按钮发送HTTP POST 请求。
我们在button元素上设置了onClick属性,因此每当按钮被点击时,handleClick函数将会被调用。我们通过async关键字标记了handleClick函数,因此我们可以使用await关键字来等待内部的Promise返回。
在handleClick函数中,我们等待POST请求的完成并更新state变量。
该示例使用了原生的 fetch API,但如果你使用axios依赖包,这个概念也适用。
axios

下面是如何使用axios包在点击按钮时发出http POST请求。
如果你决定使用axios,请确保你已经通过运行npm install axios安装了该软件包。
  1. import {useState} from 'react';
  2. import axios from 'axios';
  3. const App = () => {
  4.   const [data, setData] = useState();
  5.   const [isLoading, setIsLoading] = useState(false);
  6.   const [err, setErr] = useState('');
  7.   const handleClick = async () => {
  8.     setIsLoading(true);
  9.     try {
  10.       const {data} = await axios.post(
  11.         '<https://reqres.in/api/users>',
  12.         {name: 'John Smith', job: 'manager'},
  13.         {
  14.           headers: {
  15.             'Content-Type': 'application/json',
  16.             Accept: 'application/json',
  17.           },
  18.         },
  19.       );
  20.       console.log(JSON.stringify(data, null, 4));
  21.       setData(data);
  22.     } catch (err) {
  23.       setErr(err.message);
  24.     } finally {
  25.       setIsLoading(false);
  26.     }
  27.   };
  28.   console.log(data);
  29.   return (
  30.    
  31.       {err && <h2>{err}</h2>}
  32.       <button onClick={handleClick}>Make request</button>
  33.       {isLoading && <h2>Loading...</h2>}
  34.       {data && (
  35.         
  36.           <h2>Name: {data.name}</h2>
  37.           <h2>Job: {data.job}</h2>
  38.         
  39.       )}
  40.    
  41.   );
  42. };
  43. export default App;
复制代码

上述示例向我们展示了,如何使用axios在点击按钮时,发出http POST 请求。
如果你使用axios,请确保你已经在项目的根目录下运行npm install axios来安装该包。
使用axios包时的语法更简洁一些,我们要处理的实现细节也更少,但概念是一样的。
我们必须在一个按钮元素上设置onClick属性,并在每次点击按钮时发出一个HTTP请求。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王國慶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表