Skip to content

Commit 1f13f2e

Browse files
authored
docs: added ru readme for landing (#21)
1 parent a67a335 commit 1f13f2e

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

README-ru.md

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# Data Source · [![npm version](https://img.shields.io/npm/v/@gravity-ui/data-source?logo=npm&label=version)](https://www.npmjs.com/package/@gravity-ui/data-source) [![ci](https://img.shields.io/github/actions/workflow/status/gravity-ui/data-source/ci.yml?branch=main&label=ci&logo=github)](https://github.com/gravity-ui/data-source/actions/workflows/ci.yml?query=branch:main)
2+
3+
`Data Source` — это простой оберточный компонент для фетчинга данных. В рамках [чистой архитектуры](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html) он выполняет роль порта, позволяя создавать обертки для различных сценариев работы с данными. `Data Source` в своей основе использует [`react-query`](https://tanstack.com/query/latest).
4+
5+
## Установка
6+
7+
```bash
8+
npm install @gravity-ui/data-source @tanstack/react-query
9+
```
10+
11+
`@tanstack/react-query` является peer-зависимостью.
12+
13+
## Начало работы
14+
15+
В первую очередь определите тип ошибки и на основе стандартных конструкторов создайте свои собственные конструкторы для источников данных и ошибок (`makePlainQueryDataSource` или `makeInfiniteQueryDataSource`). Например:
16+
17+
```ts
18+
import {makePlainQueryDataSource as makePlainQueryDataSourceBase} from '@gravity-ui/data-source';
19+
20+
export interface ApiError {
21+
title: string;
22+
code?: number;
23+
description?: string;
24+
}
25+
26+
export const makePlainQueryDataSource = <TParams, TRequest, TResponse, TData, TError = ApiError>(
27+
config: Omit<PlainQueryDataSource<TParams, TRequest, TResponse, TData, TError>, 'type'>,
28+
): PlainQueryDataSource<TParams, TRequest, TResponse, TData, TError> => {
29+
return makePlainQueryDataSourceBase(config);
30+
};
31+
```
32+
33+
Создайте компонент `DataLoader` на основе стандартного шаблона. Он поможет настроить отображение статуса загрузки и ошибок. Например:
34+
35+
```tsx
36+
import {
37+
DataLoader as DataLoaderBase,
38+
DataLoaderProps as DataLoaderPropsBase,
39+
ErrorViewProps,
40+
} from '@gravity-ui/data-source';
41+
42+
export interface DataLoaderProps
43+
extends Omit<DataLoaderPropsBase<ApiError>, 'LoadingView' | 'ErrorView'> {
44+
LoadingView?: ComponentType;
45+
ErrorView?: ComponentType<ErrorViewProps<ApiError>>;
46+
}
47+
48+
export const DataLoader: React.FC<DataLoaderProps> = ({
49+
LoadingView = YourLoader,
50+
ErrorView = YourError,
51+
...restProps
52+
}) => {
53+
return <DataLoaderBase LoadingView={LoadingView} ErrorView={ErrorView} {...restProps} />;
54+
};
55+
```
56+
57+
Определите первый источник данных:
58+
59+
```ts
60+
export const objectDataSource = makePlainQueryDataSource({
61+
// Keys have to be unique. Maybe you should create a helper for making names of data sources
62+
name: 'object',
63+
// skipContext is just a helper to skip 2 first parameters in the function (context and fetchContext)
64+
fetch: skipContext(objectFetch),
65+
});
66+
```
67+
68+
Интегрируйте его в приложение:
69+
70+
```tsx
71+
import {useQueryData} from '@gravity-ui/data-source';
72+
73+
export const SomeComponent: React.FC = () => {
74+
const {data, status, error, refetch} = useQueryData(objectDataSource, {objectId: 1});
75+
76+
return (
77+
<DataLoader status={status} error={error} errorAction={refetch}>
78+
{data && <ObjectComponent object={data} />}
79+
</DataLoader>
80+
);
81+
};
82+
```

0 commit comments

Comments
 (0)