Axios
Axios چیست ؟
axios یک کتابخانه است که با نصب ان در پروژه این امکان را به ما میده تا بتونیم درخواست های http خودمون را ارسال کنیم
شاید براتون سوال بشه که چرا از همون fetch جاوااسکریپت استفاده نمیکنیم ؟
مزیت های axios نسبت به fetch این هست که مرورگر های قدیمی را پشتیبانی میکند و از همه مهمتر interceptor را پشتیبانی میکنه که بعدا باهاش بیشتر اشنا میشیم.
نحوه نصب axios
برای نصب axios به روت پروژه برید و دستور زیر را اجرا کنید:
npm i axios
نحوه استفاده از axios
برای مثال فرض کنید ما یک api داریم که لیست کاربر ها را به ما میدهد برای دریافت لیست با axios به روش زیر عمل میکنیم:
async function getAllUsers() {
const response = await axios.get('https://jsonplaceholder.typicode.com/users');
return response.data;
}
دقت داشته باشید که axios همیشه یک promise بازگردانی میکنه.
برای صدا کردن متد های http در axios به روش زیر عمل میکنیم:
async function addUser(username, email) {
const response = await axios.post('https://jsonplaceholder.typicode.com/users', {username, email});
return response.data;
}
async function deleteUser(id) {
const response = await axios.delete(`https://jsonplaceholder.typicode.com/users/${id}`);
return response.data;
}
نحوه استفاده از axios در ریکت
فرض کنید کامپوننتی داریم که لیست کاربرها را نمایش میدهد :
import axios from 'axios';
import { useEffect, useState } from 'react';
async function getAllUsers() {
const response = await axios.get('https://jsonplaceholder.typicode.com/users');
return response.data;
}
function App() {
const [users, setUsers] = useState([]);
useEffect(() => {
getAllUsers().then((users) => setUsers(users));
}, []);
return (
<div>
<table>
<thead>
<tr>
<th>id</th>
<th>username</th>
<th>email</th>
</tr>
</thead>
<tbody>
{users.length > 0 && users.map((user) => {
return (
<tr key={user.id}>
<td>{user.id}</td>
<td>{user.username}</td>
<td>{user.email}</td>
</tr>
);
})}
</tbody>
</table>
</div>
);
}
export default App;
- صدا کردن axios در useEffect رخ داده است.
- برای هر ردیف در map حتما باید key غیر تکراری تعریف شود
میتنوانید مثال بالا را با useMemo , useCallback بهینه سازی کنید
Json Serverچیست ؟
تا اینجا ما مجبور بودیم برای داشتن api تست به json placeholder درخواست بزنیم حالا میتونیم با json server خودمون api تستی بسازیم
نحوه نصب :
npm i -g json-server
با نصب json-server به صورت global در همه سیستم شما قابل دسترسی خواهد بود
نحوه راه اندازی سرور api
حالا نیاز هست که یک پوشه را به عنوان دیتابیس json-server در نظر بگیریم
mkdir ./server
حالا یک فایل به اسم db.json درون پوشه میسازیم و محتوای زیر را درون ان میریزیم:
{
"users": [
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
},
{
"id": 2,
"name": "Ervin Howell",
"username": "Antonette",
"email": "Shanna@melissa.tv",
"address": {
"street": "Victor Plains",
"suite": "Suite 879",
"city": "Wisokyburgh",
"zipcode": "90566-7771",
"geo": {
"lat": "-43.9509",
"lng": "-34.4618"
}
},
"phone": "010-692-6593 x09125",
"website": "anastasia.net",
"company": {
"name": "Deckow-Crist",
"catchPhrase": "Proactive didactic contingency",
"bs": "synergize scalable supply-chains"
}
}
]
}
حالا زمان ان رسیده که اجراش کنیم.دستور زیر را بزنید:
json-server --watch server/db.json -p 3001
بعد از اجرا شدن سرور ترمینال را باز بگذارید تا تغییرات سرور ما اجرا بماند.
حالا در مثال های قبل میتوان ادرس زیر را جا به جا کنیم:
https://jsonplaceholder.typicode.com/users
====>
http::localhost:3001/users
پروژه
پویا سازی پروژه ویترین و صفحه ساز و دریافت اطلاعات انها از سرور