mirror of
https://github.com/ershisan99/flashcards-docs.git
synced 2025-12-16 12:33:17 +00:00
lesson 3 in progress
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"chapter-1": "Роутинг"
|
"chapter-1": "Роутинг",
|
||||||
|
"chapter-2": "RTK Query"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,23 +39,69 @@ export function App() {
|
|||||||
|
|
||||||
## Создание Api
|
## Создание Api
|
||||||
|
|
||||||
```ts filename="src/services/auth/auth.ts"
|
### Создание базового Api
|
||||||
|
|
||||||
|
```ts filename="src/services/base-api.ts"
|
||||||
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
|
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
|
||||||
|
|
||||||
export const authApi = createApi({
|
export const baseApi = createApi({
|
||||||
reducerPath: 'authApi',
|
reducerPath: 'baseApi',
|
||||||
baseQuery: fetchBaseQuery({
|
baseQuery: fetchBaseQuery({
|
||||||
baseUrl: 'https://api.flashcards.andrii.es',
|
baseUrl: 'https://api.flashcards.andrii.es',
|
||||||
credentials: 'include',
|
credentials: 'include',
|
||||||
|
prepareHeaders: headers => {
|
||||||
|
headers.append('x-auth-skip', 'true')
|
||||||
|
},
|
||||||
}),
|
}),
|
||||||
endpoints: builder => {
|
endpoints: builder => {
|
||||||
return {
|
return {
|
||||||
getMe: builder.query<any, void>({
|
getDecks: builder.query<any, void>({
|
||||||
query: () => `auth/me`,
|
query: () => `v1/decks`,
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
export const { useGetMeQuery } = authApi
|
export const { useGetDecksQuery } = baseApi
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Подключение базового Api к стору
|
||||||
|
|
||||||
|
```ts filename="src/services/store.ts"
|
||||||
|
import { configureStore } from '@reduxjs/toolkit'
|
||||||
|
|
||||||
|
import { baseApi } from './base-api'
|
||||||
|
|
||||||
|
export const store = configureStore({
|
||||||
|
reducer: {
|
||||||
|
[baseApi.reducerPath]: baseApi.reducer,
|
||||||
|
},
|
||||||
|
middleware: getDefaultMiddleware => getDefaultMiddleware().concat(baseApi.middleware),
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Использование хука
|
||||||
|
|
||||||
|
Что бы протестировать как работает хук, вызовем его в Router компоненте:
|
||||||
|
|
||||||
|
```tsx filename="src/router.tsx"
|
||||||
|
export const Router = () => {
|
||||||
|
const result = useGetDecksQuery()
|
||||||
|
|
||||||
|
console.log(result)
|
||||||
|
|
||||||
|
return <RouterProvider router={router} />
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
В консоли получим следующее:
|
||||||
|

|
||||||
|
|
||||||
|
На каждое изменение статуса промиса мы получаем обновленный объект с данными о запросе.
|
||||||
|
|
||||||
|
Обычно нам из этого интересны следующие поля:
|
||||||
|
|
||||||
|
- `data` - данные, которые вернул запрос
|
||||||
|
- `isLoading` - флаг, который показывает, что запрос выполняется
|
||||||
|
- `isError` - флаг, который показывает, что запрос завершился с ошибкой
|
||||||
|
- `error` - объект ошибки
|
||||||
|
|||||||
BIN
pages/lesson-3/images/result-console.png
Normal file
BIN
pages/lesson-3/images/result-console.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 346 KiB |
Reference in New Issue
Block a user