일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- RT scheduling
- vue3
- 자바스크립트
- cors
- 연결리스트
- 알고리즘
- 프로세스
- C
- 배열
- GraphQL
- 큐
- 프론트엔드
- RxJS
- 포인터
- 프로그래머스
- alexnet
- 웹팩
- 스택
- APOLLO
- Machine Learning
- 릿코드
- 타입스크립트
- 브라우저
- 자료구조
- 컨테이너
- 해시테이블
- 연결 리스트
- 코딩테스트
- 이진탐색
- pytorch
- Today
- Total
프린세스 다이어리
[Storybook] 스토리북 mdx 기본틀 잡기 본문
스토리북 공식문서에 정말 상세하게 잘 나오기는 했으나 필요한 기능을 찾아 조합하는 것은 좀 다른 문젠 것 같다. 가장 단순한 샘플 Button 컴포넌트를 예시로 기록해보겠다.
1. 버튼의 props 옵션 선택하는 기능 추가하기
import {ArgsTable, Canvas, Meta, Story} from '@storybook/addon-docs';
import BaseButton from 'common/components/input/BaseButton.vue';
<Meta
title="Button"
component={BaseButton}
argTypes={{
boxStyle: {
name: 'Button Style',
control: {
type: 'select',
options: ['block', 'inline-block'],
},
},
theme: {
name: 'Button Color',
control: {
type: 'radio',
options: ['blue', 'sky', 'grey', 'red', 'pink', 'yellow'],
},
},
size: {
name: 'Button Size',
control: {
type: 'select',
options: ['medium', 'semi-large', 'large'],
},
},
onClick: {action: 'clicked'},
}}
/>
Meta > argTypes에 옵션이름 > control > options 에 배열로 기존 컴포넌트에서 props로 넘겨받는 값들을 나열해서 넣어준다. control > type에 select로 지정하면 드롭다운이, radio로 지정하면 라디오 버튼으로 나온다. 라디오 버튼이 선택지를 모두 노출하기 때문에 개인적으로 라디오 버튼을 선호한다. 그렇게 하면 docs에 다음과 같이 나온다.
2. 클릭 이벤트 찍기
<Meta
title="Button"
component={BaseButton}
argTypes={{
// ...
onClick: {action: 'clicked'},
}}
/>
클릭 이벤트 찍는 방법은 다양한데, 그중에 공식문서에서 나오는 방법은 위와 같다. 이렇게 argTypes에 onClick을 작성해 주면 클릭 때마다 다음과 같이 나온다.
이 외에도 parameters에 어떤 엘리먼트를 클릭했는지 명확히 하는 방법도 있다. parameters > actions.handles에 'click'과 컴포넌트의 클래스를 작성해주는 방법이다.
<Meta
// ...
parameters={{
actions: {
handles: ['click .accept-btn'],
},
}}
/>
또 부모 컴포넌트에 emit 하는 함수를 action에 등록할 수도 있다. 그런데 이건 레거시라고 한다. 개인적으론 이게 더 컴포넌트에서 어떤 함수를 emit하고 있는지 명확히 할 수 있어서 더 좋아 보인다. https://github.com/storybookjs/storybook/blob/master/addons/actions/ADVANCED.md
export const Template = (args, {argTypes}) => ({
components: {BaseConfirm},
setup() {
return {args, argTypes};
},
template: `<base-confirm v-bind="args" @click="accept" />`,
methods: {
accept: action('accept-clicked'),
},
});
3. canvas 뷰포트 설정하기
preview.js에서 여러 종류의 viewport를 설정할 수 있다.
export const parameters = {
viewport: {
viewports: {
mobile1: {
name: 'iPhone 4, 4s',
styles: {
width: '320px',
height: '480px',
},
type: 'mobile',
},
mobile3: {
name: 'iPhone 6, 6s, 7, 8',
styles: {
width: '375px',
height: '667px',
},
type: 'mobile',
},
mobile4: {
name: 'iPhone 6+, 6s+, 7+, 8+',
styles: {
width: '414px',
height: '736px',
},
type: 'mobile',
},
mobile5: {
name: 'iPhone X, XS',
styles: {
width: '375px',
height: '812px',
},
type: 'mobile',
},
// ...
},
defaultViewport: 'mobile5',
},
// ...
};
parameters.viewport.viewports에 위와 같이 뷰포트 이름, 가로세로 픽셀, 타입 이렇게 정해줄 수 있다. 또 defaultViewport로 스토리북 기본 뷰포트를 설정할 수 있다. 이런 parameter는 이렇게 preview.js에 전역으로 설정해줄 수도 있지만 컴포넌트 독스마다 각기 다른 설정을 해줄 수도 있다.
뷰포트를 커스텀해서 적용한 모습이다.
'FE' 카테고리의 다른 글
[RxJS] Observable 스트림의 흐름을 합치는 3가지 방법 merge(), concat(), switch() (1) | 2022.02.27 |
---|---|
프로미스 후속 처리 메서드(resolve, reject, all, race, allSettled) 정리 (0) | 2022.01.29 |
[Storybook] 스토리북에서 vue svg파일 import 하는법 (0) | 2022.01.27 |
센트리에 서버에러 제외하고 클라이언트 에러만 로그 보내는 법 (0) | 2022.01.26 |
테스트코드 눈에 잘 들어오게 리팩토링하기 (0) | 2022.01.25 |