storybook使用

2024-08-30 18:12
文章标签 使用 storybook

本文主要是介绍storybook使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文中有部分名词可能不准确,见谅

本文主要介绍storybook+shadcn/ui+tailwindcss的storybook代码编写。

相关lib版本
“storybook”: “^8.2.4”,
“tailwindcss”: “^3.4.1”,

一、简介

首先,使用storybook开发一个组件需要两个文件,一个是组件*.tsx一个是story*.stories.ts/*.stories.tsx,css使用了tailwind,所以不单独进行css文件的编写。
在这里关于story文件*.stories.ts/*.stories.tsx,如果有引入组件的需求,请务必使用tsx或者jsx,否则无法识别。

二、开始

以开发一个列表为例,此列表的列表项左侧是icon+title,并且支持点击选中和点击事件。
分成两个组件开发。一个是<ListItem>,一个是<List>
先看ListItem的开发

1.ListItem

1)组件

下方是ListItem的组件代码,icon可以是导入的icon组件或者本地图片放在img标签内,这点随意。
注意,因为是tsx,所以该组件需要声明类型。

//ListItem.tsx
import React from 'react';interface List{title: string;icon: string;
}interface ListItemProps {list: List;onClick: () => void;selected?: boolean;
}const ListItem: React.FC<ListItemProps> = ({list,onClick,selected = false,
}) => {return(<divclassName={`flex items-center justify-between p-4 text-sm ${selected?'border-l-4 border-l-black bg-gray-500':''}`}onClick={onClick}><div className="flex items-center"><div className="relative mr-4 size-10"><img src={list.icon} alt=""/></div><div className="font-semibold">{list.title}</div></div></div>)
}

这个组件接收三个参数,分别是list对象、onClick函数和select状态。根据这三个,在story文件中定义不同的story。

2)story
//ListItem.stories.tsx
import { Meta, StoryObj } from '@storybook/react';
import ListItem from './ListItem';const meta: Meta<typeof ListItem> = {title: 'List/ListItem',component: ListItem,argTypes: {onClick: { action: 'onClick' },selected: { control: 'boolean' },},tags: ['autodocs'],
};export default meta;type Story = StoryObj<typeof ListItem>;

编写story文件,导入Meta生成meta,定义组件的属性。对于onClick和selected,放在argTypes中,因为需要在文档中实现这两个属性的交互。StoryObj用于生成推断类型,在生成story实例时进行类型声明

//ListItem.stories.tsx
const List = {title: "tmp1";icon: "img1";
}export const Default: Story = {args: {network: List,selected: false,},
};export const Selected: Story = {args: {network: List,selected: true,},
};

上方的代码生成了两个story实例。在args中定义属性。args也可以在meta定义时声明,这样就可以得到所有story实例通用的属性。类似继承和重写。

2.List

1)组件
//List.tsx
import React from 'react';
import ListItem from './ListItem';interface List{title: string;icon: string;
}
interface ListProps {lists: List[];onSelect: () => void;selected:string
}const List: React.FC<ListProps> = ({lists,onSelect,selected
}) => {return (<div className="divide-y">{lists.map((list) => (<ListItemkey={list.title}list={list}onClick={onSelect}selected={list.title === selected}/>))}</div>);
};export default List;
2)story
//List.stories.tsx
import { Meta, StoryObj } from '@storybook/react';
import List from './List';const meta: Meta<typeof List> = {title: 'List/List',component: List,argTypes: {onSelect: { action: 'onSelect' },selected: { control: 'text' },},
};export default meta;type Story = StoryObj<typeof List>;const lists: List[] = [{title: 'tmp1',icon: 'img1',},{title: 'tmp2',icon: 'img2',},
];export const Default: Story = {args: {list2,selected: 'tmp2',},
};

这篇关于storybook使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1121563

相关文章

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

Pydantic中Optional 和Union类型的使用

《Pydantic中Optional和Union类型的使用》本文主要介绍了Pydantic中Optional和Union类型的使用,这两者在处理可选字段和多类型字段时尤为重要,文中通过示例代码介绍的... 目录简介Optional 类型Union 类型Optional 和 Union 的组合总结简介Pyd

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat