Вы устали иметь дело со сложной логикой получения данных в своих приложениях React? Не смотрите дальше! React Query здесь, чтобы спасти положение. В этой статье блога мы окунемся в чудесный мир React Query и рассмотрим различные методы, которые сделают ваш процесс получения данных более эффективным. Так что берите чашечку кофе, садитесь поудобнее и начнем!
- useQuery: хлеб с маслом React Query, useQuery — это перехватчик, который позволяет вам легко извлекать данные и обрабатывать состояния загрузки, ошибок и успеха. По умолчанию он кэширует данные, обеспечивая оптимальную производительность и сокращая ненужные сетевые запросы.
import { useQuery } from 'react-query';
const MyComponent = () => {
const { data, isLoading, isError } = useQuery('todos', fetchTodos);
if (isLoading) {
return <p>Loading...</p>;
}
if (isError) {
return <p>Error fetching data</p>;
}
return (
<ul>
{data.map((todo) => (
<li key={todo.id}>{todo.title}</li>
))}
</ul>
);
};
- useMutation: когда дело доходит до выполнения асинхронных запросов, изменяющих данные, вам подойдет useMutation. Он обрабатывает оптимистичные обновления, повторные попытки и предоставляет простой API для обновления кэша и обработки состояний успеха и ошибки.
import { useMutation } from 'react-query';
const MyComponent = () => {
const mutation = useMutation((newTodo) => createTodoAPI(newTodo));
const handleFormSubmit = async (event) => {
event.preventDefault();
const formData = new FormData(event.target);
const newTodo = Object.fromEntries(formData.entries());
mutation.mutate(newTodo);
};
return (
<form onSubmit={handleFormSubmit}>
<input type="text" name="title" placeholder="Title" />
<button type="submit" disabled={mutation.isLoading}>
{mutation.isLoading ? 'Adding...' : 'Add Todo'}
</button>
</form>
);
};
- useInfiniteQuery. При работе с данными, разбитыми на страницы, useInfiniteQuery упрощает процесс, обрабатывая разбиение на страницы и загружая дополнительные данные по мере необходимости. Он обеспечивает простой способ получения и отображения бесконечных списков или таблиц.
import { useInfiniteQuery } from 'react-query';
const MyComponent = () => {
const { data, fetchNextPage, hasNextPage, isFetchingNextPage } = useInfiniteQuery(
'todos',
fetchTodos,
{
getNextPageParam: (lastPage) => lastPage.nextPage,
}
);
return (
<>
{data.pages.map((page, pageIndex) => (
<ul key={pageIndex}>
{page.map((todo) => (
<li key={todo.id}>{todo.title}</li>
))}
</ul>
))}
{hasNextPage && (
<button onClick={fetchNextPage} disabled={isFetchingNextPage}>
{isFetchingNextPage ? 'Loading more...' : 'Load More'}
</button>
)}
</>
);
};
- useQueryClient: перехватчик useQueryClient дает вам доступ к экземпляру клиента запроса, позволяя выполнять мутации вручную или делать недействительными/запрашивать определенные запросы за пределами дерева компонентов.
import { useQueryClient } from 'react-query';
const MyComponent = () => {
const queryClient = useQueryClient();
const handleDataReset = () => {
queryClient.resetQueries('todos');
};
return (
<button onClick={handleDataReset}>Reset Data</button>
);
};
<ол старт="5">
import { useQuery } from 'react-query';
const MyComponent = () => {
const { data } = useQuery(['todos', { userId: 1 }], fetchUserTodos);
// ...
};
Это лишь некоторые из множества замечательных методов, которые React Query предлагает для упрощения получения данных в приложениях React. Благодаря интуитивно понятному API и мощным механизмам кэширования React Query позволяет разработчикам сосредоточиться на создании удобного пользовательского интерфейса, а не запутываться в сложном управлении данными.
Так чего же вы ждете? Попробуйте React Query и повысьте уровень своей игры в получении данных уже сегодня!