Component.jsx
💕 Component.stories.js
Storybook
이 무엇인지 모르게 만들어주는 게 좋다.npx storybook@latest init
으로 설치하고, npm run storybook
으로 실행한다.stories
디렉토리를 제공된다.src/
└stories/
├─ Button.css
├─ Button.jsx
├─ Button.stories.jsx
├─ Header.css
├─ Header.jsx
├─ Header.stories.jsx
├─ Page.css
├─ Page.jsx
└─ Page.stories.jsx
Component
와 Stories
가 하나의 세트로 구성된다.src/
└─ components/
└─ Button/
├─ MyButton.css
├─ MyButton.jsx
└─ MyButton.stories.jsx
Button.jsx
를 복사해 살펴보자.import PropTypes from "prop-types";
import "./MyButton.css";
export const Button = ({ primary, backgroundColor, size, label, ...props }) => {
const mode = primary
? "storybook-button--primary"
: "storybook-button--secondary";
return (
<button
type="button"
className={["storybook-button", `storybook-button--${size}`, mode].join(
" "
)}
style={{
backgroundColor,
}}
{...props}
>
{label}
</button>
);
};
Button.propTypes = {
primary: PropTypes.bool,
backgroundColor: PropTypes.string,
size: PropTypes.oneOf(["small", "medium", "large"]),
label: PropTypes.string.isRequired,
onClick: PropTypes.func,
};
Button.defaultProps = {
backgroundColor: null,
primary: false,
size: "medium",
onClick: undefined,
};
PropTypes
는 런타임 체킹 도구로, MyButton
이 가지는 props
의 타입을 지정한다.isRequired
를 적용하면 스토리북에서 필수값으로 인지하고 패널에 중요 표시를 한다.MyButton.stories.jsx
를 보자.import { Button } from "./MyButton";
export default {
title: "Wanted/Button",
component: Button,
tags: ["autodocs"],
argTypes: {
backgroundColor: { control: "color" },
},
};
export const Primary = {
args: {
primary: true,
label: "Button",
toggle: false,
},
};
export const Secondary = {
args: {
label: "Button",
},
};
export const Large = {
args: {
size: "large",
label: "Button",
},
};
export const Small = {
args: {
size: "small",
label: "Button",
},
};
default
에 담긴 정보가 스토리북에 그려진다. 여기에 나온 메타의 속성은 다음과 같다.
title
: 스토리북의 컴포넌트 영역을 나누면서 이름을 정한다.component
: 스토리북에 그릴 컴포넌트이다.tags: ["autodocs"]
: 컴포넌트의 스토리를 요약한 문서를 생성한다.argTypes
: 패널에서 인자값을 조정할 수 있는 형태를 제공한다.backgroundColor: { control: "color" }
은 색상을 컬러 피커나 직접 입력으로 설정할 수 있도록 한다. string
으로 바꾸면 문자열을 입력하게끔 변경된다.아래에 export
하는 객체는 버튼의 종류를 구분한다. 현재 4가지 종류의 버튼이 등록되어 있다.