<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aman Gupta</title>
    <description>The latest articles on DEV Community by Aman Gupta (@aman-frontend-dev).</description>
    <link>https://dev.to/aman-frontend-dev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3176102%2F960911e7-6d65-4670-a2a8-44cf52463868.jpg</url>
      <title>DEV Community: Aman Gupta</title>
      <link>https://dev.to/aman-frontend-dev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aman-frontend-dev"/>
    <language>en</language>
    <item>
      <title>🧪 Storybook in React — The Dressing Room Your Components Deserve 👗</title>
      <dc:creator>Aman Gupta</dc:creator>
      <pubDate>Sun, 18 May 2025 12:36:38 +0000</pubDate>
      <link>https://dev.to/aman-frontend-dev/storybook-in-react-the-dressing-room-your-components-deserve-4m9d</link>
      <guid>https://dev.to/aman-frontend-dev/storybook-in-react-the-dressing-room-your-components-deserve-4m9d</guid>
      <description>&lt;p&gt;Introduction&lt;br&gt;
When building frontend apps, how many times have you launched your full app just to test a small component — like a Button?&lt;/p&gt;

&lt;p&gt;What if you could test, tweak, and share UI components in isolation, without spinning up your entire app?&lt;/p&gt;

&lt;p&gt;That’s exactly what Storybook enables.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feuvl7dstft2r7h0ith4p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feuvl7dstft2r7h0ith4p.png" alt="Image description" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s understand it using a simple real-world analogy.&lt;/p&gt;

&lt;p&gt;🏬 Think of your Web App as a Shopping Mall&lt;br&gt;
Imagine your entire React app is like a giant shopping mall.&lt;/p&gt;

&lt;p&gt;Inside, you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modals (Changing Rooms),&lt;/li&gt;
&lt;li&gt;Buttons (Mannequins),&lt;/li&gt;
&lt;li&gt;Forms (Checkout Counters),&lt;/li&gt;
&lt;li&gt;Navigation Bars (Security Staff), and so on.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, let’s say you’re designing a button. Do you really want to:&lt;br&gt;
Boot up the full app,&lt;/p&gt;

&lt;p&gt;Log in,&lt;/p&gt;

&lt;p&gt;Navigate 3 pages deep...&lt;br&gt;
just to see how one button looks?&lt;/p&gt;

&lt;p&gt;👗 Enter Storybook — The Component Dressing Room&lt;br&gt;
Storybook lets you move that single component (like your button) into a clean, isolated environment, where you can:&lt;/p&gt;

&lt;p&gt;✅ See it in action&lt;br&gt;
✅ Change its props&lt;br&gt;
✅ Test multiple states (loading, disabled, active)&lt;br&gt;
✅ Share it with your designers or product team — without touching your main app&lt;/p&gt;

&lt;p&gt;Step-by-Step Example: Using Storybook in React + TypeScript with a Button Component&lt;br&gt;
Step 1: Install Storybook&lt;br&gt;
In your existing React + TypeScript project, run this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx storybook@latest init&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
This will:&lt;br&gt;
Create a .storybook/ folder with config&lt;br&gt;
Add example stories&lt;br&gt;
Install necessary dependencies&lt;/p&gt;

&lt;p&gt;Step 2: Create a Simple Button Component&lt;br&gt;
Create a file:&lt;br&gt;
&lt;em&gt;&lt;strong&gt;src/components/Button.tsx&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
`type ButtonProps = {&lt;br&gt;
  label: string;&lt;br&gt;
  disabled?: boolean;&lt;br&gt;
};&lt;/p&gt;

&lt;p&gt;export const Button = ({ label, disabled = false }: ButtonProps) =&amp;gt; {&lt;br&gt;
  return {label};&lt;br&gt;
};&lt;br&gt;
`&lt;br&gt;
🔹 This is a simple, reusable button component written in TypeScript.&lt;/p&gt;

&lt;p&gt;Step 3: Create the Storybook Story for This Component&lt;br&gt;
Create the story file:&lt;br&gt;
&lt;em&gt;&lt;strong&gt;src/components/Button.stories.tsx&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;`import { Button } from './Button';&lt;/p&gt;

&lt;p&gt;export default {&lt;br&gt;
  title: 'Components/Button',&lt;br&gt;
  component: Button,&lt;br&gt;
};&lt;/p&gt;

&lt;p&gt;export const Primary = () =&amp;gt; ;&lt;/p&gt;

&lt;p&gt;export const Disabled = () =&amp;gt; ;&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;Step 4: Run Storybook&lt;br&gt;
In your terminal, run:&lt;br&gt;
&lt;code&gt;npm run storybook&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Storybook will launch at:&lt;br&gt;
&lt;strong&gt;&lt;a href="http://localhost:6006" rel="noopener noreferrer"&gt;http://localhost:6006&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You’ll now see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A "Components" section&lt;/li&gt;
&lt;li&gt;Your Button component under it&lt;/li&gt;
&lt;li&gt;"Primary" and "Disabled" states rendered and clickable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm8sp5ivad5ejvjtuypn9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm8sp5ivad5ejvjtuypn9.png" alt="Image description" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frlrb499zykyrcg55liye.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frlrb499zykyrcg55liye.png" alt="Image description" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>storybook</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
