原文連結:https://bobbyhadz.com/blog/react-send-request-on-click
正文從這開始~
總覽
在React中,通過點選事件發出http請求:
- 在元素上設定
onClick
屬性。 - 每當元素被點選時,發出http請求。
- 更新
state
變數,並重新渲染資料。
如果你使用axios
,請向下滾動到下一個程式碼片段。
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;
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
安裝了該軟體包。
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;
上述示例向我們展示了,如何使用axios
在點選按鈕時,發出http POST
請求。
如果你使用axios
,請確保你已經在專案的根目錄下執行npm install axios
來安裝該包。
使用axios
包時的語法更簡潔一些,我們要處理的實現細節也更少,但概念是一樣的。
我們必須在一個按鈕元素上設定onClick
屬性,並在每次點選按鈕時發出一個HTTP請求。