Task ์ปดํฌ๋ํธ
// types.ts
export type TaskData = {
id: string;
title: string;
state: "TASK_ARCHIVED" | "TASK_INBOX" | "TASK_PINNED";
};
// Task.tsx
type TaskProps = {
task: TaskData;
onArchiveTask: (id: string) => void;
onPinTask: (id: string) => void;
};
export default function Task({
task: { id, title, state },
onArchiveTask,
onPinTask,
}: TaskProps) {
return (
//...
์ดํด๋ณด๋ฉด Task ์ปดํฌ๋ํธ๋ task ๊ฐ์ฒด์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ค์ ๋ถ๋ชจ๋ก๋ถํฐ ์ฃผ์
๋ฐ๊ณ ์๋๊ฐ๋จํ UI ์ปดํฌ๋ํธ์์ ์ ์ ์๋ค.
์คํ ๋ฆฌ ํ์ผ
meta
import type { Meta, StoryObj } from '@storybook/react-vite';
import { fn } from 'storybook/test';
import Task from './Task';
export const ActionsData = {
onArchiveTask: fn(),
onPinTask: fn(),
};
const meta = {
component: Task,
title: 'Task',
tags: ['autodocs'],
//๐ Our exports that end in "Data" are not stories.
excludeStories: /.*Data$/,
args: {
...ActionsData,
},
} satisfies Meta<typeof Task>;
export default meta;
ํ ์คํธํ ์ปดํฌ๋ํธ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ ๊ฐ์ฒด๋ค.
title: ์คํ ๋ฆฌ๋ถ์ ์คํํ์ ๋ ์ด ๋ณด์ด๋ ์ด ์ปดํฌ๋ํธ์ ์ด๋ฆargs: ๋ชจ๋ ํ ์คํธ ์ผ์ด์ค(์คํ ๋ฆฌ)์ ๊ณตํต์ ์ผ๋ก ํ์ํ ๋งค๊ฐ๋ณ์๋ค.ActionData๋ผ๋ ์คํ์ด ํจ์๋ฅผ ํตํด ํ์ prop์ ์๋ฆฌ๋ฅผ ๋์ ํ๊ณ ์๋๊ฒ์ ๋ณผ ์ ์๋ค.
