React dev? Why and how you should use Storybook
Tags: react, storybook, testing
Published: 2021-11-05 07:35:19

There are plenty of great tools in the React ecosystem. But only a few ones that are must-use. Storybook is one of them.

If you don't know Storybook, I have great news! The reasons to use Storybook are obvious and it's very easy to start with!

## What is Storybook and why you need it

You install Storybook, write a story (more on this later), launch Storybook and you get this:

![Storybook - Example](https://cdn.hashnode.com/res/hashnode/image/upload/v1635763143904/kHT4hVmeN.png)

See the blue rectangle? This is one of your React components. The rest is a UI provided by Storybook.

Storybook provides a per-component sandbox so you can quickly use your components, one at a time.

How is this useful?

### Direct access

There is always this component you are working on which is buried in your app. You need three clicks to reach it. The first times are okay, but at some point it begins to be boring and disrupt your flow.

With Storybook, you have a story which renders your component exactly the way you want it. Hot reloading included.

### All states at once

How to show a component, but not just with one particular set of properties? With Storybook, this is just natural.

### Sandbox for debugging

Sometime, you need to isolate a component to debug it and hack around. With Storybook, you can do this in seconds... When you don't have written the story already!

### Document as you try your component

Stories are not write-and-trash code. Once your story is ready, you commit it and make it part of your code base. It becomes a great resource for you and your team.

There are several others reasons to love Storybook. The ones above are just my favorite, why Storybook is part of 100% of my React projects.

## Getting started with Storybook

Quick! Install it!

```bash
cd your/react/project
npx sb init
```

Now it's ready to start:

```bash
npm run storybook
```

Storybook opens a new tab, showing its welcome screen:

![Storybook welcome screen](https://cdn.hashnode.com/res/hashnode/image/upload/v1635780037921/O6y4ET7BW.png)

During install, Storybook creates a few demo stories. Click the "Button" demo on the left:

![Button demo story](https://cdn.hashnode.com/res/hashnode/image/upload/v1635780165544/mos7e1oiB.png)

The blue button with rounded corners is a demo component, but it could be one of yours. The Controls tab below lets you quickly play with the component. Cool!

Look at the existing demo stories in `src/stories/Button.stories.jsx`:

```jsx
import React from 'react';

import { Button } from './Button';

// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
export default {
  title: 'Example/Button',
  component: Button,
  // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
  argTypes: {
    backgroundColor: { control: 'color' },
  },
};

// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
const Template = (args) => <Button {...args} />;

export const Primary = Template.bind({});
// More on args: https://storybook.js.org/docs/react/writing-stories/args
Primary.args = {
  primary: true,
  label: 'Button',
};

export const Secondary = Template.bind({});
Secondary.args = {
  label: 'Button',
};

export const Large = Template.bind({});
Large.args = {
  size: 'large',
  label: 'Button',
};

export const Small = Template.bind({});
Small.args = {
  size: 'small',
  label: 'Button',
};
```

In this file, half of the code is Storybook-related. You can either choose to understand and memorize it, or just copy/paste and adapt it when you start a new file. Fair enough. The other half is about your component. In this demo, `size`, `primary` and `label`, or the fact that you need four stories named `Primary`, `Secondary`, `Large` and `Small` are completely related with the demo button, not Storybook itself.

Create a file somewhere in `src`, name it after your component, eg. `MyComp.stories.jsx`, populate it with the content of `src/stories/Button.stories.jsx` and start telling your own stories!

## Conclusion

There are many worthwhile React tools around. But Storybook is probably the only one I recommend whatever the project - as long as React is involved. I hope I convinced you to give it a try!

And if you actually write your first story, please  [let me know](https://twitter.com/ph_bernard) !