기본적으로 storybook에서는 위의 그림처럼 나타내어진다.
여기서 이 위치를 바꾸고 싶거나, 다른 style을 주고 싶을 때 사용하는 것이 이 Decorator인 것이다.
=> 밑의 예시에서는 marginLeft를 주는 방법을 사용하였다.
Story decorators(Button.stories.tsx)
-> 스토리에만 적용되는 것이다.
export const Variant = (Variants.decorators = [
(Story) => (
<div style={{ margin: "3em" }}>
<Story />
</div>
),
]);
Component decorators(Button.stories.tsx)
-> 컴포넌트 모두에게 적용되는 것이다.
export default {
title: "Example/Button",
component: Button,
decorators: [
(Story) => (
<div style={{ marginLeft: "10%" }}>
<Story />
</div>
),
],
} as ComponentMeta<typeof Button>;
Global decorators(.storybook/previes.js)
-> 모든 stories.tsx에 적용된다.
import React from 'react';
import { ThemeProvider } from 'styled-components';
export const decorators = [
(Story) => (
<ThemeProvider theme="default">
<Story />
</ThemeProvider>
),
];
Story Parameters(Button.stories.tsx)
-> story에만 parameter가 적용된다.
const Template: ComponentStory<typeof Button> = (args) => <Button {...args} />;
export const Playground = Template.bind({});
Playground.args = {
size: "small",
label: "Click me!",
};
Playground.parameters = {
backgrounds: {
values: [
{ name: "red", value: "#f00" },
{ name: "green", value: "#0f0" },
],
},
};
Component Parameters(Button.stories.tsx)
-> 컴포넌트에 해당하는 모든 story에 parameter가 적용된다.
export default {
title: "Example/Button",
component: Button,
parameters: {
backgrounds: {
values: [
{ name: 'red', value: '#f00' },
{ name: 'green', value: '#0f0' },
],
},
},
} as ComponentMeta<typeof Button>;
Global parameters(preview.js)
-> 모든 파일에 적용된다
export const parameters = {
backgrounds: {
values: [
{ name: 'red', value: '#f00' },
{ name: 'green', value: '#0f0' },
],
},
};