Files
2025-10-03 15:43:22 +05:00

93 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Client - React Query Integration
## Установленные пакеты
- `@tanstack/react-query` - управление серверным состоянием
- `ky` - современный HTTP-клиент
## Структура
### `/src/lib`
- `api.ts` - конфигурация HTTP-клиента (ky)
- `queryClient.ts` - конфигурация React Query
### `/src/hooks`
- `useAuth.ts` - хуки для аутентификации
- `useLogin()` - вход
- `useRegister()` - регистрация
- `useMe()` - получение текущего пользователя
- `useLogout()` - выход
### `/src/types`
- `auth.ts` - TypeScript типы для аутентификации
## Примеры использования
### Логин
```tsx
import { useLogin } from "../hooks/useAuth";
function LoginPage() {
const loginMutation = useLogin();
const handleSubmit = async (data) => {
try {
await loginMutation.mutateAsync(data);
// Успешный логин
} catch (error) {
// Обработка ошибки
}
};
return (
<form onSubmit={handleSubmit}>
{/* форма */}
{loginMutation.isPending && <p>Загрузка...</p>}
{loginMutation.isError && <p>Ошибка!</p>}
</form>
);
}
```
### Получение текущего пользователя
```tsx
import { useMe } from "../hooks/useAuth";
function Profile() {
const { data: user, isLoading, isError } = useMe();
if (isLoading) return <div>Загрузка...</div>;
if (isError) return <div>Ошибка</div>;
return <div>Привет, {user?.name}!</div>;
}
```
### Выход
```tsx
import { useLogout } from "../hooks/useAuth";
function LogoutButton() {
const logoutMutation = useLogout();
return (
<button onClick={() => logoutMutation.mutate()}>
Выйти
</button>
);
}
```
## Фичи
### API клиент (ky)
- Автоматическое добавление Bearer токена из localStorage
- Префикс URL для всех запросов
- JSON по умолчанию
### React Query
- Автоматическое кэширование (5 минут)
- Retry логика для запросов
- Оптимистичные обновления
- Автоматическая инвалидация кэша