ما هو Storybook وكيف يمكنني استخدامه لإنشاء مكتبة مكونات في React؟

تساعد الأطر مثل React و Vue و Angular المطورين على إنشاء أنظمة معيارية باستخدام المكونات ، لكن هذا لا يتضمن عادةً طريقة جيدة لرؤيتها جميعًا من وجهة نظر أعلى.

إذن كيف يمكننا استخدام Storybook لبناء مكتبات وأنظمة تصميم توثق ذاتيًا أثناء بنائها؟

  • ما هو Storybook؟
  • ماذا سنبني؟
  • الخطوة 0: تمهيد التطبيق
  • الخطوة 1: تثبيت Storybook
  • الخطوة 2: إنشاء زر جديد
  • الخطوة 3: استخدام مكون الزر الجديد الخاص بنا
  • التكرار: إنشاء مكون رأس جديد
  • المزيد من ميزات القصص القصيرة

ما هو Storybook؟

Storybook عبارة عن أداة JavaScript تتيح للمطورين إنشاء أنظمة واجهة مستخدم منظمة تجعل كل من عملية البناء والتوثيق أكثر كفاءة وأسهل في الاستخدام.

بمجرد إنشاء مكون ، يتيح لك Storybook إنشاء ملف "قصة" حيث يمكنك بعد ذلك استيراد المكون الخاص بك وإنشاء أمثلة مختلفة لحالات الاستخدام في iFramed sandbox باستخدام هذا المكون.

يوفر هذا بيئة منظمة ومركزة لبناء مكونات جديدة والعمل على المكونات الموجودة.

ماذا سنبني؟

سنقوم بتشغيل تطبيق React JS جديد باستخدام تطبيق Create React.

داخل هذا التطبيق ، سنقوم بتثبيت Storybook وإنشاء بعض المكونات الجديدة التي ستساعدنا على تعلم كيفية إنشاء مكونات جديدة يمكننا العمل عليها في قصة ثم استخدامها في تطبيق React.

الخطوة 0: تمهيد التطبيق

للبدء ، سنبدأ من الصفر باستخدام تطبيق Create React. سيساعدنا هذا في التركيز على زيادة الإنتاجية في Storybook بدلاً من السير في دمجها في تطبيق حالي.

ومع ذلك ، إذا كنت تعمل بالفعل مع تطبيق تم إنشاؤه باستخدام تطبيق Create React الذي لم يتم إخراجه ، فيجب أن تظل قادرًا على متابعة الجزء 1 وما بعده تمامًا!

لذلك دعونا نبدأ بالانتقال إلى حيث نريد إنشاء تطبيقنا الجديد وتشغيل أمر Create React App:

npx create-react-app my-storybook 

ملاحظة: لا تتردد في استبدال my-storybookاسم الدليل الذي تختاره.

بمجرد الانتهاء من التشغيل ، يمكنك الانتقال إلى الدليل:

cd my-storybook 

ونحن على استعداد للذهاب!

الخطوة 1: تثبيت Storybook

لحسن الحظ ، يجعل كتاب القصص من السهل جدًا البدء في تثبيت قياسي لـ React. لا سيما مع Create React App ، يكتشف Storybook تلقائيًا أننا نستخدم تطبيقًا تم إنشاؤه باستخدام CRA ويقوم بتثبيت التبعيات وسقالات كل شيء لنا.

تهيئة القصص القصيرة

لبدء تثبيت Storybook ، قم بتشغيل:

npx -p @storybook/cli sb init 

إذا كنت لا تستخدم تطبيق Create React أو أنه لا يعمل ، يمكنك التحقق من الأدلة المتاحة في مستنداتهم.

بعد الانتهاء من ذلك ، يجب تثبيت جميع تبعيات Storybook الخاصة بنا.

بدء القصة المصورة

لذلك نحن الآن على استعداد للتحرك! أخيرًا ، قم بتشغيل:

yarn storybook # or npm run storybook 

وبمجرد انتهاء تحميل كل شيء ، ستفتح Storybook علامة تبويب جديدة في متصفحك وستظهر لك الآن رسالة ترحيب داخل لوحة معلومات Storybook الجديدة!

اتبع جنبا إلى جنب مع الالتزام!

الخطوة 2: إنشاء زر جديد

إذا استغرقت ثانية للتجول في لوحة القيادة ، فربما لاحظت أنها تأتي محملة مسبقًا بزر متاح كعرض توضيحي.

يجب أن تلاحظ أيضًا إذا نقرت على الزر ، فسترى فعلاً إجراءً مطبوعًا داخل علامة التبويب "الإجراءات" في الأسفل. يعرض هذا الحدث الذي تم التقاطه من النقر فوق الزر.

إنه أمر بسيط ، لكن من الرائع أن تحصل على إحساس جميل بشأن ما يمكن توقعه في القصص القصيرة. المشكلة الوحيدة هي أن هذا مخصص فقط لأغراض العرض التوضيحي ، لذلك دعونا نبني زرنا الخاص لاستبداله.

إنشاء مكون زر جديد

للبدء ، دعنا أولاً ننشئ بعض الأدلة:

  • ضمن src، قم بإنشاء مجلد جديد يسمىcomponents
  • ضمن components، قم بإنشاء مجلد جديد يسمىButton

بمجرد إنشاء هذه المجلدات ، قم بإنشاء ملف جديد يسمى index.jsداخل src/components/Buttonالمجلد الخاص بك وإضافة داخل:

// Inside src/components/Button/index.js export { default } from './Button'; 

سيؤدي هذا إلى استيراد الملف التالي الذي أنشأناه Button.jsوالذي سيسمح لنا باستيراد ملفاتنا بسهولة أكبر src/components/Buttonبدلاً من /src/components/Button/Button.

بعد ذلك ، لنقم بإنشاء Button.jsبجوار index.jsملفنا بالمحتوى التالي:

// Inside src/components/Button/Button.js import React from 'react'; const Button = ({ children, ...rest }) => { return (  { children }  ) } export default Button; 

Here, we're creating a new component called Button that adds a class of button to the element and passes through the children. We're a additionally destructuring the rest of the props into the rest variable and spreading that value into the element.

If you've followed along, your files should now look like this:

Using our new Button component

So now that we have our Button component, let's use it!

Open up the file src/stories/1-Button.stories.js and replace the line that's importing Button with:

And once you hit save, you can open back up your browser tab with your Storybook dashboard, and you can now see a button that looks mostly similar, but it uses the browser's default styles for the element. You'll even notice that if you click it, the event will still be logged under the Actions tab.

Styling our Button component

Finally, we probably don't want to use the browser default styles, so let's make it look nice.

In our src/components/Button directory, add a new file Button.css and add the following content:

/* Inside src/components/Button/Button.css */ .button { color: white; font-weight: bold; background-color: blueviolet; border: none; padding: .8em 1em; border-radius: .2rem; } 

This applies a few styles to our .button class like adding a background color and changing the font color to white.

But if you open Storybook, you'll notice it didn't do anything. To use it, we need to import it into our component.

Inside src/components/Button/Button.js add the following at the top under the React import:

import './Button.css'; 

And once you save that and open up your browser, you should now see our new button with our updated styles!

Follow along with the commit!

Step 3: Using our new Button component

The ultimate goal of our component is to use it right? So let's add it to our app.

Switching over to the React app

First we'll need to either start our React app in a new terminal tab or kill the Storybook process and start the React process there. To start the React app using Create React App, run:

yarn start # or npm run start 

Once that loads, we should have our standard Create React App if you're following along with me:

Importing and using the new button

Next, inside of src/App.js, let's import our new Button at the top of the page:

import Button from './components/Button'; 

With Button imported, we can use it. Here, we can simply add it anywhere we want in the page. I'm going to replace the Learn React link with:

Hello, Storybook!

And if we save and reload the page, we should now see our Button on the page!

Follow along with the commit

Repeat: Creating a new Header component

The great thing about Storybook and React (or any of the supported frameworks) is that this process scales to as many components as you want.

So let's build another component!

Creating our Header component

Similar to our Button, let's start off by creating the set of directories and files that give us our component.

Since we already did this once, I'm going to provide the code without walking through what's going on.

Let's start off by spinning back up our Storybook server with:

yarn storybook # or npm run storybook 

Create a Header directory inside the src/components directory.

Create an index.js file inside of src/components/Header with the following content:

// In src/components/Header/index.js export { default } from './Header'; 

Create a Header.js file inside of src/components/Header with the following content:

// In src/components/Header/Header.js import React from 'react'; import './Header.css'; const Header = ({ children }) => { return ( 

{ children }

) } export default Header;

Create a Header.css file inside of src/components/Header with the following content:

/* In src/components/Header/Header.css */ .header { font-family: sans-serif; font-size: 2.5em; color: blueviolet; border-bottom: solid 5px aqua; padding-bottom: .2em; box-shadow: 0 5px 0 blueviolet; } 

Now if you notice, if you try to open up Storybook, again, nothing will happen. This time we need to create a new story file.

Creating a new Story file

Inside src/stories, add a new file called 2-Header.stories.js:

// Inside src/stories/2-Header.stories.js import React from 'react'; import Header from '../components/Header'; export default { title: 'Header', component: Header, }; export const Text = () => Hello Header; 

Here's a breakdown of our story file:

  • First, we import our component – this is pretty standard any time we want to use it
  • The first thing we export is a default object. With Storybook, it expects the default export to be the configuration of our story, so here we provide it with a title and we pass in the component that we're using for this story
  • The second and last thing we export is the Text constant. With Storybook, any non-default export will be considered a variation that will get nested under the title that you provide in the default export

And if you save this file and open up your Storybook dashboard in the browser, you should now see the new header!

Using the Header component

Using our component is just the same as our Button component, so inside of src/App.js, let's add our Header.

After starting your React server, first import our new Header:

// In src/App.js import Header from './components/Header'; 

Then add it to the top of the page:

// In src/App.js My App 

And if you open the page, we'll see our new Header!

Follow along with the commit!

Adding more components

As you've noticed with our second Repeat step – adding a new component is pretty much the same process for any type of component we want to add. Once we have it in our library, we can develop it in a focused environment and then import it to our app to use.

You can now use this to manage your library of components and better maintain an entire system for your project!

More Storybook features

Storybook doesn't stop with just adding components, it provides the ability to configure Addons that enhance the core capabilities opening up a lot of possibilities.

Here are some of my favorites...

Story Source

When building a component system, the hope is that people can easily use these components. But if you don't have documentation, someone would have to open up the file or try to find another use example.

Instead, Story Source shows the code source of the story file you created allowing someone browsing your Storybook dashboard to get an example right along with the component output!

Storyshots

If you're a fan of automated testing, you might have heard of using Jest or another tool for adding snapshot testing to your app.

StoryShots is a way to easily add Jest snapshot testing to your component system. It creates snapshots based off of the stories you create so you can make sure that your components aren't fundamentally changing (or breaking) during development.

What's your favorite part of Storybook?

Share with me on Twitter!

Continue the conversation!

[email protected] is an awseome tool to manage a library of components for your project’s design system ?

It makes it fun to create and update components in a focused env ?‍?

أتعرف على ماهية Storybook وكيف أبدأ؟ #webdev # 100DaysOfCode // t.co / 4TLFlmp4Df

- كولبي فايوك (colbyfayock) 9 يونيو 2020

تابعني لمزيد من Javascript و UX وأشياء أخرى مثيرة للاهتمام!

  • ؟ تابعني على تويتر
  • ؟ ️ اشترك في My Youtube
  • ✉️ اشترك في رسالتي الإخبارية