Storybook: ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ๋•Œ ๋…ธ๋ธŒ ๊ฐœ์ฒด UI๊ฐ€ ์‚ฌ๋ผ์ง

์— ๋งŒ๋“  2020๋…„ 02์›” 25์ผ  ยท  2์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: storybookjs/storybook

๋ฒ„๊ทธ ์„ค๋ช…

@storybook/addon-knobs ํ†ตํ•ด ๋ Œ๋”๋ง ๋œ object ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด UI๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

์žฌํ˜„ํ•˜๋ ค๋ฉด

  1. ์• ๋“œ์˜จ ๋…ธ๋ธŒ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ object ๋งŒ๋“ค๊ธฐ
  2. npm run storybook
  3. Storybook ๋…ธ๋ธŒ ํƒญ์—์„œ object ๊ฐ’ ๋ณ€๊ฒฝ
  4. object ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™

object ๊ฐ’์€ ๋…ธ๋ธŒ๊ฐ€ ์‚ฌ๋ผ์ง€์ง€ ์•Š๊ณ  Storybook UI ๋‚ด์—์„œ ํŽธ์ง‘ ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฐ ์ƒท

storybook-knobs-object-bug

์ฝ”๋“œ ์กฐ๊ฐ

์ž‘์—… ์˜ˆ์ œ : https://github.com/benjarwar/storybook-knobs-object-test

  1. ์ €์žฅ์†Œ ๋ณต์ œ
  2. npm i
  3. npm run storybook

์ฒด๊ณ„:

Environment Info:

  System:
    OS: macOS Mojave 10.14.6
    CPU: (12) x64 Intel(R) Core(TM) i7-8850H CPU @ 2.60GHz
  Binaries:
    Node: 8.15.1 - ~/.nvm/versions/node/v8.15.1/bin/node
    Yarn: 1.21.1 - ~/.nvm/versions/node/v8.15.1/bin/yarn
    npm: 6.13.7 - ~/.nvm/versions/node/v8.15.1/bin/npm
  Browsers:
    Chrome: 79.0.3945.130
    Firefox: 72.0.1
    Safari: 13.0.5
  npmPackages:
    @storybook/addon-actions: ^5.3.14 => 5.3.14 
    @storybook/addon-knobs: ^5.3.14 => 5.3.14 
    @storybook/addon-links: ^5.3.14 => 5.3.14 
    @storybook/addons: ^5.3.14 => 5.3.14 
    @storybook/react: ^5.3.14 => 5.3.14 
knobs question / support

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ์Šคํ† ๋ฆฌ ํ•จ์ˆ˜ ๋‚ด์—์„œ ๊ฐ์ฒด ๋…ธ๋ธŒ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ์ œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•˜๋ฉด ๋ชจ๋“  ์„ค์ •์ด ์™„๋ฃŒ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

export const Ctas = () => {

  const value = object(label, defaultValue);

  return (
    <div>
      <div>
        <h3>CTA</h3>
        <Cta href="#primary-cta" type="Primary">
          {text("Primary CTA Label", "Primary CTA")}
          {value.foo}
        </Cta>
      </div>
    </div>
  );
};

๋ชจ๋“  2 ๋Œ“๊ธ€

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ์Šคํ† ๋ฆฌ ํ•จ์ˆ˜ ๋‚ด์—์„œ ๊ฐ์ฒด ๋…ธ๋ธŒ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ์ œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•˜๋ฉด ๋ชจ๋“  ์„ค์ •์ด ์™„๋ฃŒ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

export const Ctas = () => {

  const value = object(label, defaultValue);

  return (
    <div>
      <div>
        <h3>CTA</h3>
        <Cta href="#primary-cta" type="Primary">
          {text("Primary CTA Label", "Primary CTA")}
          {value.foo}
        </Cta>
      </div>
    </div>
  );
};

์•„, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @jonspalmer. ๊ทธ๊ฒƒ์€ ์‹ค์ œ๋กœ ์†์ž„์ˆ˜๋ฅผ ์ผ๊ณ  ๋ง์ด๋ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰