Storybook

Setup

$ npx create-react-app example-story-book
$ cd example-story-book
$ npm install @storybook/react --save-dev

story book ์„ค์ •์„ ์œ„ํ•ด .storybook ํด๋” ์•„๋ž˜์— config ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

// .storybook/config.js

import { configure } from "@storybook/react";

configure(require.context("../docs", true, /\.stories\.js$/), module);

config ํŒŒ์ผ์ถ”๊ฐ€ ํ›„ story component ๋“ค์„ ๋†“์„ docs ํด๋”๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š” docs ํด๋”์˜ story component ๋“ค์€ *.stories.js ์ด๋ผ๋Š” ํŒจํ„ด์˜ ์ด๋ฆ„์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

storybook ์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” demo button ์„ ์ถ”๊ฐ€ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

// docs/button.stories.js

import React from "react";

import { storiesOf } from "@storybook/react";
import { Button } from "@storybook/react/demo";

export default { title: "Button" };

storiesOf("Button Component", module)
  .add("withText", () => <Button>Hello Button</Button>)
  .add("withEmoji", () => (
    <Button>
      <span role="img" aria-label="so cool">
        ๐Ÿ˜€ ๐Ÿ˜Ž ๐Ÿ‘ ๐Ÿ’ฏ
      </span>
    </Button>
  ));

storiesOf ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์Šคํ† ๋ฆฌ ๋‹จ์œ„๋กœ ๋…ธ์ถœ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค. ํฌ๊ฒŒ Button Component ๋ผ๋Š” ์Šคํ† ๋ฆฌ๋กœ ๋ฌถ์–ด ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

Button Component Story

์‹คํ–‰์„ ์œ„ํ•ด package.json ์˜ scripts ์— storybook ๋ช…๋ น์–ด๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์œ„์ชฝ์—์„œ story ์— ์ถ”๊ฐ€ํ–ˆ๋˜ button ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ์ƒํƒœ์— ๋”ฐ๋ฅธ ์ปดํฌ๋„ŒํŠธ ๋ณ€ํ™” ๋˜๋Š” ๋””์ž์ธ ์ ์šฉ์—ฌ๋ถ€๋ฅผ ๋ฏธ๋ฆฌ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Component ์ถ”๊ฐ€ํ•ด๋ณด๊ธฐ

styled-components ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ง์ ‘ ๊ตฌ์„ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

src ํด๋” ์•„๋ž˜์— input.js ๋ผ๋Š” component ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”

input ์€ focus props ์— ๋”ฐ๋ผ border style ์ด ๋ณ€ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น component ๋ฅผ story book ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

Addon

addon ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ธฐ๋ณธ๋™์ž‘ ์™ธ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

.storybook ํด๋”์— addons.js ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ addons ๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

config ํŒŒ์ผ์—๋„ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

addon ๊ธฐ๋Šฅ์œผ๋กœ input ์˜ focus ๋ฅผ ์กฐ์ ˆํ•˜๋„๋ก ์ถ”๊ฐ€ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐฐํฌ

Storybook ์„ ๋ฐฐํฌํ•  Github Repo ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”

Github page ์— ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ํ›„ ๋ฐฐํฌ ๋ช…๋ น์–ด๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ ๊ฒฐ๊ณผ๋ฌผ์€ <github name>.github.io/<repo name>

์ €์˜ ๊ฒฝ์šฐ https://appear.github.io/example-storybookarrow-up-right ์ž…๋‹ˆ๋‹ค.

Last updated

Was this helpful?