在 React 中单击时发出 Http 请求
Make an Http request on click in React
在 React 中单击时发出 http 请求:
onClick
在元素上设置道具。- 每次单击该元素时,都会发出 HTTP 请求。
- 更新状态变量并呈现数据。
如果您使用
axios
,向下滚动到下一个代码片段。应用程序.js
import {useState} from 'react'; const App = () => { const [data, setData] = useState(); const [isLoading, setIsLoading] = useState(false); const [err, setErr] = useState(''); const handleClick = async () => { setIsLoading(true); try { const response = await fetch('https://reqres.in/api/users', { method: 'POST', body: JSON.stringify({ name: 'John Smith', job: 'manager', }), headers: { 'Content-Type': 'application/json', Accept: 'application/json', }, }); if (!response.ok) { throw new Error(`Error! status: ${response.status}`); } const result = await response.json(); console.log('result is: ', JSON.stringify(result, null, 4)); setData(result); } catch (err) { setErr(err.message); } finally { setIsLoading(false); } }; console.log(data); return ( <div> {err && <h2>{err}</h2>} <button onClick={handleClick}>Make request</button> {isLoading && <h2>Loading...</h2>} {data && ( <div> <h2>Name: {data.name}</h2> <h2>Job: {data.job}</h2> </div> )} </div> ); }; export default App;
如果您需要在 React 中单击按钮时发出 HTTPGET
请求,请查看我的另一篇文章 –
Fetch data on Button click in React。
该示例显示了如何在 React 中单击按钮时发出 HTTP Post 请求。
我们将onClick
prop 设置在按钮元素上,因此每次单击按钮时,handleClick
都会调用该函数。
handleClick
我们将函数标记为async
,因此我们可以使用
await
关键字在其中等待 Promises。
在
handleClick
函数中,我们等待 POST http 请求完成并更新状态变量。此示例使用本机fetch
API,但如果您也使用axios包,则该概念也适用。
axios
以下是如何使用包在单击按钮时发出 http POST 请求
。
如果您决定使用axios
,请确保您已通过运行安装包npm install axios
。
应用程序.js
import {useState} from 'react'; import axios from 'axios'; const App = () => { const [data, setData] = useState(); const [isLoading, setIsLoading] = useState(false); const [err, setErr] = useState(''); const handleClick = async () => { setIsLoading(true); try { const {data} = await axios.post( 'https://reqres.in/api/users', {name: 'John Smith', job: 'manager'}, { headers: { 'Content-Type': 'application/json', Accept: 'application/json', }, }, ); console.log(JSON.stringify(data, null, 4)); setData(data); } catch (err) { setErr(err.message); } finally { setIsLoading(false); } }; console.log(data); return ( <div> {err && <h2>{err}</h2>} <button onClick={handleClick}>Make request</button> {isLoading && <h2>Loading...</h2>} {data && ( <div> <h2>Name: {data.name}</h2> <h2>Job: {data.job}</h2> </div> )} </div> ); }; export default App;
该示例展示了如何在点击时使用 发出 Http POST 请求axios
。
如果使用
axios
,请确保通过npm install axios
在项目的根目录中运行来安装包。使用axios
包时的语法更简洁,我们需要处理的实现细节也更少,但概念是一样的。
我们必须onClick
在按钮元素上设置属性,并在每次单击按钮时发出 HTTP 请求。