Simple component

date
2026-02-17
order
1

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์˜ ์ž๋ฆฌ๋ฅผ ๋Œ€์‹  ํ•˜๊ณ  ์žˆ๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.