본문 바로가기
부트캠프교육중/react

Storybook

by 뭉지야 2023. 2. 22.
728x90

#CDD를 할수있는 대표적인 도구가 styled component이고
CDD를 지원하는 도구중 하나인 component explorer(컴포넌트 탐색기)에 많은 UI개발도구가 다양하게 있는데 그중 하나가 storybook이다.

#Storybook
-UI개발 즉, CDD를 하기 위한 도구이다. (UI개발도구)
-각각의 컴포넌트들을 따로 볼수있게 구성해주어 한번에 하나의 컴포넌트에서 작업할수있다. 
복잡한 개발스택을 시작하거나, 특정 데이터를 데이터베이스로 강제 이동하거나, 애플리케이션을 탐색할 필요없이 전체 UI를 한눈에 보고 개발할수있다.
-재사용성을 확대하기 위해 컴포넌트를 문서화하고, 자동으로 컴포넌트를 시각화하여 시뮬레이션할수있는 다양한 테스트 상태를 확인할수있다.
-이를 통해 버그를 사전에 방지할수있도록 도와준다.
-테스트 및 개발속도를 향상시키는 장점이 있으며, 애플리케이션 또한 의존성을 걱정하지 않고 빌드할수있다.
-storybook을 사용하면 애프리케이션을 실행하고 이벤트를 통해 상태를 변경하는 과정을 거치지 않아도 상태 변화에 따른 컴포넌트의 변화를 확인할수있다.

-컴포넌트들을 문서화해서 관리한다.

#사용하는이유
- storybook은 기본적으로 독립적인 개발환경에서 실행된다. 개발자는 애플리케이션의 다양한 상황에 구애받지 않고 UI 컴포넌트를 집중적으로 개발할수있다.
-회사의 내부 개발자들을 위해 문서화를 하여 회사의 UI라이브러리로써 사용하거나, 외부 공개용 디자인 시스템을 개발하기 위한 기본 플랫폼으로 사용할수있다.

#storybook에서 지원하는 주요기능
-UI컴포넌트들을 카탈로그화하기
-컴포넌트 변화를 Stories로 저장하기
-핫 모듈 재 로딩과 같은 개발 눌 경험을 제공하기
-리액트를 포함한 다양한 뷰 레이어 지원하기

 

#사용방법

일단 Create React App을 활용해서 리액트 프로젝트를 만들어라.

폴더가 생성되면, 폴더 안에서 밑의 코드를 실행해라.

npx storybook init

storybook 설치가 완료되면, /src/stories폴더가 생성된다.(storybook 예시파일들이 들어있다.)

이제 storybook을 실행해라

npm run storybook

그럼 localhost:6006으로 접근할거다.

 

이렇게 storybook을 실행하면 애플리케이션을 실행하고 이벤트를 통해 상태를 변경하는 과정을 거치지 않아도 상태 변화에 따른 컴포넌트의 변화를 확인할수있다.


src폴더안에 Title.js파일을 하나 만들어라.

import React from "react";

const Title = ({title, textColor}) => (
<h1 style={{color: textColor}}>{title}</h1>
);

export default Title;

src폴더안에 Title.stories.js파일을 하나 만들어라.

import Title from "./Title";

// title : 컴포넌트 이름으로        
// component : 어떤 컴포넌트를 가져와서 스토리로 만들 것인지 명시합니다.
// argTypes : 컴포넌트에 필요한 전달인자의 종류와 타입을 정해줍니다.
//            지금은 title, textColor이라는 전달인자에 text 타입이 필요함을 의미합니다.
export default {
    title: "Practice/Title", 
    component: Title,
    argTypes: {
        title: { control: "text" },
        textColor: {control: "text"}
    }
}

// Title 컴포넌트가 args를 전달받아 props로 내려줍니다.
const Template = (args) => <Title {...args} />

// Storybook에서 확인하고 싶은 컴포넌트는 export const로 작성합니다.
// 템플릿을 사용하여 Storybook에 넣어줄 스토리를 하나 만들어주었습니다.
// Template.bind({}); 는 공식이다.그냥암기해라.
export const RedTitle = Template.bind({});

// 만들어준 스토리의 전달인자를 작성해줍니다.
RedTitle.args= {
    title: "Red Title",
    textColor: "red"
}

export const BlueTitle = Template.bind({});

BlueTitle.args= {
    title: "Blue Title",
    textColor: "blue"
}

#전달인자를 직접 받는 스토리를 만들어보자.

전달인자를 직접 작성해주면 거기에 맞춰 모습이 변한다.

밑의 코드 추가하면된다.

export const StorybookTitle = (args) =>{
    return <Title {...args} />
}

 

#전달인자를 직접 받으면서, styled component를 사용해서 만든 컴포넌트를 스토리로 만들어보자.

//Button.js
import React from "react";
import styled from "styled-components";

const StyledButton = styled.button`
background: ${(props)=> props.color || "white"};
width: ${(props)=> (props.size === "big" ? "200px":"100px")};
height: ${(props)=> (props.size === "big" ? "80px" : "40px")}
`
const Button = ({color, size, text}) => (
<StyledButton color={color} size={size}>{text}</StyledButton>
);
export default Button
//Button.stories.js
import Button from "./Button";

export default{
title: "Practice/Button",
component: Button,
argTypes: {
color: { control: 'color'},
size: { control: {type:'radio', options: ['big', 'small']}},
text: {control: 'text'}
}
};
export const StorybookButton = (args) => (
<Button {...args}></Button>
)
728x90

'부트캠프교육중 > react' 카테고리의 다른 글

useRef  (1) 2023.02.23
상태관리  (0) 2023.02.23
Styled Component  (0) 2023.02.21
CDD (Component Driven Development)  (0) 2023.02.20
useNavigate  (0) 2023.02.19