Documentando seus componentes no Storybook
Tags: programming, tutorial, typescript, storybook
Published: 2024-03-26 15:33:54

Vamos abordar os conceitos que envolvem doc blocks, parameters e argTypes com exemplos de suas utilizações.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k5uso13gt21pncg06tjh.jpg)

Recentemente me deparei com a necessidade de documentar uma biblioteca de componentes pela primeira vez. Resolvi aproveitar um pouco do conhecimento adquirido nessa jornada para compartilhar aqui com vocês.

**Por que documentar seus componentes?**
Ao documentar os seus componentes, você além de facilitar o entendimento da utilização deles para o coleguinha que for pegar pela primeira vez. Também facilita para o seu eu do futuro que desenvolveu aquele componente já tem alguns meses. Além disso, podemos adicionar as alterações dinâmicas para quem gostaria de por exemplo ver outro tema do seu componente de botão apenas clicando no nome do tema.

**Como documentar o seu componente**
A documentação ocorre dentro do arquivo _stories.jsx_ do seu componente. É lá que a magia acontece e você determina como será a apresentação dele para quem estiver acessando a página do seu storybook. Para isso precisamos entender o conceito de alguns aliados que o storybook nos disponibiliza:

[_**Parameters —**_](https://storybook.js.org/docs/writing-stories/parameters) é esse carinha que vai nos permitir codificar e controlar tudo que envolve o ambiente do nosso componente. É dentro dele que vamos trabalhar hoje. Vamos passar o doc blocks para trazer as informações do nosso componente de uma forma mais bonita para todos que acessam o storybook.

Essa é a estrutura padrão que fica dentro do arquivo _stories.tsx_ do seu componente.

{% embed https://gist.github.com/alessandraluzm/47edcc0e3b805d6ff87c8896dbbd19d4 %}

[_**doc blocks —**_](https://storybook.js.org/docs/writing-docs/doc-blocks) é utilizado para documentar e compartilhar componentes UI através de uma interface bonitinha. Possui features que nos permitem interagir diretamente com o componente através dessa interface, e adicionar blocos de código para copiar e colar.

Exemplo da estrutura mostrada anteriormente, mas agora com seus blocos de documentação adicionadas:

{% embed https://gist.github.com/alessandraluzm/72111ad99d1ff81aea0aef02f28b156d %}

Vamos dar uma olhadinha tag por tag para maior compreensão.

**`<Title />`** Renderiza uma tag de estilo H1
**`<Subtitle />`** Renderiza uma tag de estilo H2
**`<Description />`** Renderiza uma tag de estilo P
**`<Stories />`** Quando não recebe uma prop indicando qual renderizar, ele pode renderizar todos os exemplos de componentes que existe dentro do arquivo
**`<Source />`** É aqui que adicionamos um trecho de código com a funcionalidade de copiar e colar junto. Note também que no meu exemplo eu adicionei a tag dark para que o bloco de código fique escuro.
**`<Primary />`** Mostra o primeiro componente do arquivo stories. Geralmente é utilizado após o título e descrição do componente.
**`<Controls />`** É a interface dinâmica que além de documentar o componente, também permite uma interação com ele. O que alimenta esse carinha é o argTypes que vamos ver a seguir.

Exemplo de como isso irá renderizar no Storybook (sem a chamada do **`<Controls />`** junto):

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/graf7oxzrj2ki9pzax1s.png)

[**_argTypes —_**](https://storybook.js.org/docs/api/arg-types) Especifica e documenta o comportamento dos argumentos esperados pelo componente, e também os tipos de valores que são aceitos por cada um deles. Quando utilizado sem ser em conjunto do **Controls(doc blocks, citado anteriormente)**, mostra essa lista estática em uma tabela:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wdhbprn15b97wud6tf7o.png)

Quando utilizado em conjunto do Controls mostra esses argTypes um por um em cada linha da tabela. A diferença é que agora mostra de forma dinâmica para que possa haver interações diretas com o componente.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8edh5dawem5g7y7suhvy.png)

No exemplo utilizando o Controls, nós temos uma coluna a mais que permite essa interação direta com o componente.

Exemplo completo de como ficaria um arquivo stories com tudo que aprendemos:

{% embed https://gist.github.com/alessandraluzm/e67afb7697933de0c18c1c033c896f75 %}

Espero que esse artigo tenha ajudado você a desmistificar um pouco a parte da documentação dos componentes, ou pelo menos tenha despertado a curiosidade de tentar por aí também.

Para entender mais sobre argTypes e seu funcionamento acesse a [documentação do Storybook](https://storybook.js.org/docs/writing-docs)

Até a próxima!