Skip to content

Commit 9a4c52d

Browse files
authored
Merge pull request #105 from frontend-opensource-project/URH-110/use-mock-data
[URH-110] useMockData 문서
2 parents 6bdeb83 + 488e7f9 commit 9a4c52d

File tree

2 files changed

+165
-0
lines changed

2 files changed

+165
-0
lines changed

docs/pages/hooks/_meta.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"useUnmountEffect": "useUnmountEffect",
2525
"useOutsideClick": "useOutsideClick",
2626
"useKeyDown": "useKeyDown",
27+
"useMockData": "useMockData",
2728
"useWorker": "useWorker",
2829
"useLocalStorage": "useLocalStorage",
2930
"_template": {

docs/pages/hooks/useMockData.mdx

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
# useMockData
2+
3+
## Introduce
4+
5+
주어진 스키마와 옵션을 바탕으로 모의 데이터를 생성합니다.
6+
7+
필요한 형태의 데이터를 쉽게 테스트하고 사용할 수 있도록 구성이 되어있습니다.
8+
9+
```ts
10+
interface UseMockDataProps<S extends Schema> {
11+
options?: Partial<Options>;
12+
schema: S;
13+
}
14+
15+
interface UseMockDataReturns<T> {
16+
mockData: T;
17+
addItem: () => void;
18+
}
19+
20+
const useMockData = <S extends Schema>(
21+
props: UseMockDataProps<S>
22+
): UseMockDataReturns<SchemaToType<S>[]> => { ... }
23+
```
24+
25+
### Props
26+
27+
- `schema` : 모의 데이터의 구조를 정의하는 스키마 객체입니다. 각 필드의 타입과 구조를 설정할 수 있습니다.
28+
- `options` : 데이터 생성과 관련된 옵션을 지정할 수 있는 객체입니다. 기본적으로 설정된 `defaultOptions`이 사용되며, 필요 시 이를 덮어쓸 수 있습니다.
29+
- `options.count` : 생성될 요소의 개수를 명시합니다.
30+
- `options.type` : 각 데이터 타입에 대한 기본 생성 범위를 설정하는 객체입니다.
31+
32+
```ts
33+
const defaultOptions: Options = {
34+
count: 1, // 생성될 더미데이터 요소의 개수
35+
type: {
36+
string: {
37+
// 문자열 길이 범위
38+
min: 3,
39+
max: 10,
40+
},
41+
number: {
42+
// 숫자 생성 범위
43+
min: 1,
44+
max: 100,
45+
},
46+
image: {
47+
// 이미지 너비, 높이 범위
48+
width: {
49+
min: 800,
50+
max: 2560,
51+
},
52+
height: {
53+
min: 600,
54+
max: 1440,
55+
},
56+
},
57+
date: {
58+
// 날짜 범위
59+
start: formatDateToYYYYMMDD(),
60+
end: formatDateToYYYYMMDD(1),
61+
},
62+
},
63+
};
64+
```
65+
66+
### Returns
67+
68+
- `mockData` : 주어진 스키마에 따라 생성된 모의 데이터 배열입니다.
69+
- `addItem` : 새로운 모의 데이터를 추가하는 함수입니다. 호출 시 현재 schema에 기반해 새로운 항목이 배열에 추가됩니다.
70+
71+
import { Callout } from 'nextra/components';
72+
73+
<Callout type="warning">
74+
스키마에 정의된 날짜 범위가 유효하지 않을 경우 오류가 발생할 수 있습니다. (예:
75+
시작 날짜가 종료 날짜보다 나중인 경우)
76+
</Callout>
77+
78+
## Examples
79+
80+
```tsx copy filename="TestComponent.tsx"
81+
import React from 'react';
82+
import useMockData, { useMockDataSchema } from './useMockData';
83+
84+
const schema: useMockDataSchema = {
85+
user: {
86+
id: 'UUID',
87+
name: 'string',
88+
posts: [
89+
{
90+
title: 'string',
91+
content: 'string',
92+
tags: ['string'],
93+
comments: [
94+
{
95+
userId: 'UUID',
96+
comment: 'string',
97+
createdAt: 'date',
98+
},
99+
],
100+
},
101+
],
102+
profile: {
103+
avatar: 'image',
104+
bio: 'string',
105+
followers: [
106+
{
107+
followerId: 'UUID',
108+
followedAt: 'date',
109+
},
110+
],
111+
},
112+
},
113+
};
114+
115+
const TestComponent: React.FC = () => {
116+
const { mockData, addItem } = useMockData({ schema });
117+
118+
// mockData 데이터
119+
// [
120+
// {
121+
// "user": {
122+
// "id": "249ad9db-db18-4a92-b38d-6f17894e36e3",
123+
// "name": "Rhudl",
124+
// "posts": [
125+
// {
126+
// "title": "Utvdwx",
127+
// "content": "Hqskuyacjz",
128+
// "tags": [
129+
// "Ufgca"
130+
// ],
131+
// "comments": [
132+
// {
133+
// "userId": "97a3b3c9-1a96-492c-954b-96c62f731291",
134+
// "comment": "Iffaf",
135+
// "createdAt": "2024-11-16T15:23:23.481Z"
136+
// }
137+
// ]
138+
// }
139+
// ],
140+
// "profile": {
141+
// "avatar": "https://picsum.photos/2427/697",
142+
// "bio": "Wtxaccpqj",
143+
// "followers": [
144+
// {
145+
// "followerId": "a6c324ce-18be-49d3-a4d3-86ecb8bc9756",
146+
// "followedAt": "2024-10-26T13:14:18.015Z"
147+
// }
148+
// ]
149+
// }
150+
// }
151+
// }
152+
// ]
153+
154+
return (
155+
<div>
156+
<h1>Mock Data with Nested Structures</h1>
157+
<pre>{JSON.stringify(mockData, null, 2)}</pre>
158+
<button onClick={addItem}>Add Item</button>
159+
</div>
160+
);
161+
};
162+
163+
export default TestComponent;
164+
```

0 commit comments

Comments
 (0)