Story 작성

Story란?

Story는 UI 컴포넌트의 렌더링 된 상태를 캡처합니다. 인자 집합이 주어지면 컴포넌트 상태를 반환하는 함수입니다.

circle-info

Storybook은 React 또는 Vue의 props, Angular의 @Input 및 기타 유사한 개념(전달 된 속성)을 일반적인 용어인 인자(줄여서 args)를 사용합니다.

Story 구성

Storybook은 컴포넌트와 그 하위 스토리의 2가지 기본 단계로 구성되어 있습니다. 스토리는 컴포넌트에 대한 개별 이야기입니다. 필요한 만큼의 스토리를 컴포넌트 별로 작성할 수 있습니다.

Story 파일 생성

Story는 컴포넌트 파일이 위치한 디렉토리 안에 작성합니다. 이 파일은 개발용이며 프로덕션 번들에 포함되지 않습니다. Story를 구성할 컴포넌트를 작성한 후, 컴포넌트 파일과 같은 위치에 Story 파일을 추가합니다.

Story 파일 포멧

컴포넌트 스토리 포멧(CSF)arrow-up-right은 Story를 구성하는 객체를 말하며, 작성할 Story의 정보를 작성합니다.

속성

설명

Storybook 앱 사이드바에 표시되는 컴포넌트 이름

Story를 작성 할 컴포넌트 설정 (컴포넌트 설명, props 추출)

모든 Story에 공통 적용할 전달 인자 설정

각 Story 인자(args)의 행동(behaviour) 방식 설정

Story를 감싸는 렌더링 함수 (Story 보강, 렌더링 세부 정보 수집 등)

Story에 대한 정적 메타 데이터 정의 (다양한 애드온 구성 제공)

Storybook에서 Story를 내보낼 때 렌더링에서 제외 설정 (정규 표현 식)

컴포넌트 스토리 포멧(CSF)은 "기본(default) 내보내기arrow-up-right"로 내보내야 합니다.

Story 작성(정의)

컴포넌트의 Story(CSF)는 "지정 된 이름(named) 내보내기arrow-up-right"를 사용하여 컴포넌트 Story를 정의합니다. Story 이름은 TitleCase로 작성하는 것이 권장됩니다.

Storybook에 표시되는 Story 이름을 변경해야 한다면? storyName 속성을 사용할 수 있습니다.

멀티 Story 작성

Story는 컴포넌트를 렌더링 하는 방법을 설명하는 함수입니다. 컴포넌트 마다 여러 개의 Story를 가질 수 있습니다. Story를 만드는 가장 간단한 방법은 인자가 다른 컴포넌트를 여러 번 렌더링하는 것입니다.

circle-exclamation

템플릿, 인자 활용

하나 이상 컴포넌트의 스토리를 만들 경우 Template 변수에 컴포넌트 복사본을 할당하는 것이 편리합니다. 이 패턴을 Story에 도입하면 작성 또는 유지보수 해야 할 코드 양이 줄어듭니다.

circle-info

Template.bind({ })는 함수의 복사본을 만드는 표준 JavaScriptarrow-up-right의 기법입니다. 이 기법을 사용하여 각각의 스토리가 고유한 속성(properties)을 갖지만, 동시에 동일한 구현을 사용하도록 할 수 있습니다.

인자(arguments)는 줄여서 args를 사용하며, Storybook을 다시 시작하지 않고도 Controls addon으로 컴포넌트를 실시간으로 수정할 수 있습니다. 값이 변하면 컴포넌트도 실시간 업데이트 됩니다.

circle-exclamation

아래 코드는 Story 작성 예시입니다.

Storybook 구동

storybook 구동 명령을 사용해 Storybook을 웹 브라우저에서 확인할 수 있습니다.

Light 모드

Dark 모드 (별도 설정 필요)

Storybook 스니펫

Storybook 컴포넌트 스니펫arrow-up-right을 사용하면 손쉽게 컴포넌트 Story를 구성할 수 있습니다.

매개변수 활용

매개변수는 Story에 대한 정적 메타 데이터를 정의하는 Storybook의 방법입니다. Story의 매개변수를 사용하여 Story 또는 Story 그룹 레벨에서 다양한 애드온에 구성을 제공 할 수 있습니다. 예를 들어 앱의 다른 컴포넌트와 다른 배경에서 컴포넌트를 테스트 하고 싶다면? 다음과 같이 CSF를 설정합니다. (컴포넌트 레의 매개변수 설정)

데코레이터 활용

데코레이터는 Story를 렌더링 할 때 임의의 마크업으로 컴포넌트를 감싸는 메커니즘입니다. 예를 들어 테마 또는 레이아웃 래퍼(wrapper)가 필요할 수 있습니다. 또는 UI에 특정 컨텍스트 혹은 데이터 공급자(provider)가 필요할 수 있습니다.

간단한 예는 컴포넌트의 Story에 스타일 래퍼를 추가하는 것입니다. 다음과 같이 Story를 감싸는 데코레이터를 작성하면 Storybook 뷰포트에 스타일이 반영된 래퍼 요소가 렌더링 됩니다.

circle-info

보다 복잡한 데코레이터 구성 예(ThemeProvider 등)를 참고arrow-up-right하세요.

멀티 컴포넌트 Story

디자인 시스템 또는 컴포넌트 라이브러리를 빌드 할 때 함께 작동하도록 디자인 된 2개 이상 컴포너트의 Story를 작성하려면 상위 컴포넌트와 하위 컴포넌트 모두 불러와 사용하고, 컴포넌트 작동 상황 별 Story를 렌더링 하는 것이 좋습니다.

circle-info

컴포넌트 구성이 보다 복잡하다면 멀티 컴포넌트 Story 워크플로우arrow-up-right를 참고하세요.

Last updated