Storybook: ์ธ๋ผ์ธ ์ฝ”๋“œ (๋ฐฑํ‹ฑ`)๊ฐ€์žˆ๋Š” ์ •๋ณด ์• ๋“œ์˜จ ๋งˆํฌ ๋‹ค์šด์ด ์†์ƒ๋จ

์— ๋งŒ๋“  2017๋…„ 08์›” 15์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: storybookjs/storybook

๋ฒ„์ „

  • @storybook/react v3.2.4
  • @storybook/addon-info v3.2.4

์ž…๋ ฅ ์˜ˆ

๊ณต์‹ ์˜ˆ์˜์ด ํ•ญ๋ชฉ

storiesOf('Button').addWithInfo(
  'simple usage (custom propTables)',
  `
      This is the basic usage with the button with providing a label to show the text.
      Since, the story source code is wrapped inside a div, info addon can't figure out propTypes on it's own.
      So, we need to give relevant React component classes manually using \`propTypes\` option as shown below:
      ~~~js
      storiesOf('Button')
        .addWithInfo(
          'simple usage (custom propTables)',
          <info>,
          <storyFn>,
          { inline: true, propTables: [Button]}
        );
      ~~~
    `,
  () => (
    <div>
      <Button label="The Button" onClick={action('onClick')} />
      <br />
    </div>
  ),
  { inline: true, propTables: [Button] }
);

propTypes ๋Š” ๋ฐฑํ‹ฑ์œผ๋กœ ๋ฌถ์—ฌ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ƒ ์ถœ๋ ฅ

propTypes ๋‹จ์–ด๋Š” ํ•ด๋‹น ๋‹จ์–ด๊ฐ€ ์†ํ•œ ๋ฌธ์žฅ๊ณผ ํ•จ๊ป˜ ๊ณ ์ • ํญ ๊ธ€๊ผด๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ „๋ฅ˜ ์ถœ๋ ฅ

propTypes ๋ผ๋Š” ๋‹จ์–ด๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋นˆ <pre><code></code></pre> ์š”์†Œ๊ฐ€๋ฉ๋‹ˆ๋‹ค.

Screenshot

์˜์‹ฌ๋˜๋Š” ์›์ธ

  1. backtick์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ๋Š” <Code> ์ด๋ฉฐ, <code> ๋‚ด๋ถ€์—์„œ <pre> <code> ๋กœ ๊ตฌํ˜„๋˜๋ฉฐ, ์ด๋Š” ๋ฌธ์žฅ์„ ๋‘˜๋กœ ๋‚˜๋ˆ„๋Š” ๋ธ”๋ก ์š”์†Œ์ž…๋‹ˆ๋‹ค.
  2. <Code> ๋Š” this.props.code ํ…์ŠคํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜์ง€๋งŒ ์‹ค์ œ ํ…์ŠคํŠธ๋Š” this.props.children ์žˆ์Šต๋‹ˆ๋‹ค.
info bug

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

์ธ๋ผ์ธ ๋ฐ ๋ธ”๋ก ์ฝ”๋“œ ์„น์…˜ ๋ชจ๋‘์— ์‚ฌ์šฉ๋˜๋Š” code ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.
์ธ๋ผ์ธ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ props.children ๋ Œ๋”๋งํ•ด์•ผํ•˜์ง€๋งŒ ์ฝ”๋“œ ๋ธ”๋ก props.code

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

@MrOrz ์ €๋„์ด ๋ฌธ์ œ์— ์ง๋ฉด

๋„์™€ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๊ทธ ๋ง์„ ๋“ค์œผ๋‹ˆ ๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค!

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด marksyConf ์„ (๋ฅผ) ๋ฎ์–ด ์“ธ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ PR์— ์„œ๋‘๋ฅด์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ „์˜:


import React from 'react';
import { configure } from '@storybook/react';
import { setDefaults } from '@storybook/addon-info';

function Code({ children }) {
  return <code>{children}</code>;
}

function loadStories() {/* loading stories here */}

setDefaults({ marksyConf: { code: Code } });
configure(loadStories, module);

์ธ๋ผ์ธ ๋ฐ ๋ธ”๋ก ์ฝ”๋“œ ์„น์…˜ ๋ชจ๋‘์— ์‚ฌ์šฉ๋˜๋Š” code ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.
์ธ๋ผ์ธ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ props.children ๋ Œ๋”๋งํ•ด์•ผํ•˜์ง€๋งŒ ์ฝ”๋“œ ๋ธ”๋ก props.code

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