Ðаголовок: Я пеÑепиÑал react-query | ÐегковеÑнÑй Ñ Ñк Ð´Ð»Ñ Ð°ÑÐ¸Ð½Ñ Ñонного полÑÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¸ кÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð² React
ÐÑÐ¸Ð²ÐµÑ Ð²Ñем!
Я ÑазÑабоÑал легковеÑнÑй React-Ñ
Ñк, аналогиÑнÑй React Query, Ñ Ð¾ÑновнÑми ÑÑнкÑиÑми: полÑÑение даннÑÑ
, кÑÑиÑование, повÑоÑнÑе попÑÑки и дÑ. Ðн компакÑнее и пÑоÑе в наÑÑÑойке. ÐолнÑй код доÑÑÑпен на GitHub и в npm как api-refetch
.
ÐаÑем ÑоздаваÑÑ ÑобÑÑвеннÑй Ñ Ñк?
ÐегковеÑноÑÑÑ: React Query и SWR моÑнÑе, но кÑÑпнÑе. Ðой Ñ Ñк идеален, когда важен ÑÐ°Ð·Ð¼ÐµÑ Ð¿Ð°ÐºÐµÑа, оÑобенно Ð´Ð»Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей вÑоде Intlayer.
ÐаÑÑÑойка и опÑимизаÑиÑ: ÐозможноÑÑÑ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² локалÑном Ñ ÑанилиÑе и ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°ÑаллелÑнÑми запÑоÑами. ÐопиÑÑÑ Ð¸Ð»Ð¸ клониÑÑÑ ÐºÐ¾Ð´, можно ÑдалиÑÑ Ð½ÐµÐ½ÑжнÑе ÑÑнкÑии, ÑменÑÑив ÑÐ°Ð·Ð¼ÐµÑ Ð±Ð°Ð½Ð´Ð»Ð° и повÑÑив пÑоизводиÑелÑноÑÑÑ.
Ðез пÑовайдеÑа: ÐÐ·Ð±ÐµÐ³Ð°Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Context Provider Ð´Ð»Ñ Ð³Ð»Ð¾Ð±Ð°Ð»Ñного доÑÑÑпа, пÑÐµÐ´Ð»Ð°Ð³Ð°Ñ Ð²ÐµÑÑÐ¸Ñ Ð½Ð° базе Zustand.
УÑебное ÑпÑажнение: Ðонимание внÑÑÑенноÑÑей кÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑоÑÑоÑнием.
Создание ÑобÑÑвенного Ñ Ñка позволило ÑоÑÑедоÑоÑиÑÑÑÑ Ð½Ð° нÑжнÑÑ ÑÑнкÑиÑÑ , ÑÐ¾Ñ ÑанÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Ð¼Ð°Ð»ÐµÐ½Ñкой и понÑÑной.
ФÑнкÑии
ÐолÑÑение даннÑÑ Ð¸ ÑпÑавление ÑоÑÑоÑнием: ÐагÑÑзка, оÑибки, ÑÑпеÑнÑе даннÑе.
ÐÑÑиÑование и Ñ Ñанение: ЧеÑез React или Zustand, поддеÑжка локалÑного Ñ ÑанилиÑа.
ÐовÑоÑнÑе попÑÑки и валидаÑиÑ: ÐаÑÑÑаиваемÑе лимиÑÑ Ð¸ инÑеÑвалÑ.
ÐкÑиваÑÐ¸Ñ Ð¸ инвалидизаÑиÑ: УпÑавление запÑоÑами в завиÑимоÑÑи Ð¾Ñ Ð´ÑÑÐ³Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ .
ÐаÑаллелÑнÑе запÑоÑÑ: ÐÑедоÑвÑаÑение дÑблиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов пÑи монÑиÑовании неÑколÑÐºÐ¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñов.
ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑзованиÑ
УÑÑановка
ÐлониÑÑйÑе ÑепозиÑоÑий или ÑÑÑановиÑе ÑеÑез npm:
npm install api-refetch
ÐÑÑÑÑÑй пÑимеÑ
import { AsyncStateProvider, useAsync } from "api-refetch";
function App() {
return (
<AsyncStateProvider>
<UserDetails />
</AsyncStateProvider>
);
}
const fetchUserData = async () => {
return new Promise((resolve) => {
setTimeout(() => {
resolve({ name: "John Doe" });
}, 1000);
});
};
const UserDetails = () => {
const { isLoading, data, error, revalidate } = useAsync(
"userDetails",
fetchUserData,
{
enable: true,
cache: true,
store: true,
retryLimit: 3,
retryTime: 10000,
autoFetch: true,
revalidation: true,
revalidateTime: 300000,
onSuccess: (data) => console.log("ÐаннÑе полÑÑенÑ:", data),
onError: (error) => console.error("ÐÑибка:", error),
}
);
if (isLoading) return <div>ÐагÑÑзка...</div>;
if (error) return <div>ÐÑибка: {error}</div>;
return (
<div>
<h1>{data?.name}</h1>
<button onClick={revalidate}>ÐбновиÑÑ</button>
</div>
);
};
ÐопÑобÑйÑе api-refetch, ÑообÑиÑе об оÑÐ¸Ð±ÐºÐ°Ñ Ð¸Ð»Ð¸ внеÑиÑе вклад. ÐбÑаÑÐ½Ð°Ñ ÑвÑÐ·Ñ Ð¿ÑивеÑÑÑвÑеÑÑÑ!
GitHub: api-refetch
СÑаÑÑливого кодинга!