【storybook】你需要一款能在独立环境下开发组件并生成可视化控件文档的框架吗?(一)

news2024/11/28 22:48:51

storybook

  • 介绍
  • 入门
  • 说说用法
    • prop-types
    • .stories.jsx


介绍

你肯定用过ant-design或者elemenUI中的一款UI组件库,

你肯定打开过它们的官网,

在这里插入图片描述

你是否好奇过,页面上展示的案例,

你为啥可以操作,还能查看源码供你CV?它们是怎么做到的呢?

这就是和今天主角相关的话题,它用了和storybook相关的框架umi开发的。

storybook俗称故事书,它有两大功能:

  • 它把开发环境下需要的配置都封装起来,这样可以确保使用它在独立环境下开发组件,在无需外界配置的情况下,就能完成组件开发。它支持React Vue Angular 等前端框架,根据你使用的框架,可以自动安装相应的依赖。
  • 它可以生成可视化控件文档,开发时即可随时调试,别人使用你的组件时,也可以轻松上手,就像ant-design elementUI一样,同时也方便测试人员测试。
    在这里插入图片描述

storybook开箱即用,简单易上手,样式也挺好看,对开发组件库有很大的帮助。

官网:

https://storybook.js.org/

入门

它分为下面几个版块,

  • 组件.js , .jsx , .tsx
  • 故事stories
  • 文档MDX
  • 插件addon
  • 配置 main.js , webpack , preview.js
  • 类型检查prop-types
  • 参数控件argTypes

将它分成版块后再去看文档,会是学习它的一个很好的突破口。

它支持前端的各种框架,原理是在安装它的时候,它会先去你项目的

根目录下找package.json中安装的依赖,如果在依赖里找到了react react-dom

就会给你安装react环境下的包,同理如果在依赖里找到了vue相关的依赖,

就会给你安装vue环境下的包。安装好之后,会把开发需要的配置默认做好,

让你在开发组件的时候,无后顾之忧。

安装:

npx storybook init

安装好之后,它会生成一系列文件:

.storybook // 放置storybook的配置文件
  main.js // 开发环境的各种配置
  preview.js // 和预览控件相关的配置
stories // 故事会 放置开发ui组件的各种文件
  assets // 放置静态资源 如图片
  Button.jsx // 组件
  button.css //组件的样式
  Button.stories.jsx // 一个.stories.jsx就是一个综合控件
  Introduction.stories.mdx // .mdx是md和jsx的综合形式,也是用来生成综合控件的
  ...

启动storybook:

npm run storybook

启动成功后会自动打开一个端口为6006的页面,页面显示的就是本地的

可视化UI控件文档。

这里面有些可能是第一次听到的词汇,比如stories , mdx,它们是做什么的?

它们都是用来生成ui控件文档的,只不过是一个控件文档的两种写法,

两种方式选择一种进行书写即可。

在这里插入图片描述
比如Button.stories.jsx就生成了上图的控件ui文档,.mdx具有同样功能,

而且它包含了前者。


说说用法

prop-types

这个必须先了解一下。

它是一个在开发环境下检查数据类型的库。在storybook中已经默认安装好了。

有哪些类型:

https://react.docschina.org/docs/typechecking-with-proptypes.html

https://www.cnblogs.com/shun1015/p/14466295.html

它和控件ui有什么联系呢?来看一下storybook中带的例子。

/* Button.jsx */

Button.propTypes = {
  primary: PropTypes.bool,
  backgroundColor: PropTypes.string,
  size: PropTypes.oneOf(['small', 'medium', 'large']),
  label: PropTypes.string.isRequired,
  onClick: PropTypes.func,
};

Button.defaultProps = {
  backgroundColor: null,
  primary: false,
  size: 'medium',
  onClick: undefined,
};

首先,在Button.propTypes对象中检查的5个变量,都在控件上对应显示:
在这里插入图片描述
在控件中显示出了这5个变量,并且在描述中显示了对应的数据类型,

在最右侧控制中给出了对应的控制效果,有的是切换按钮,有的是input输入框,

有的是单选框,有的是颜色选择器。

其次,在Button.defaultProps对象中给出的是默认值,在控件的Default

会显示出来。如果默认值为空,会显示为-


.stories.jsx

上面已经介绍过,它是用来生成可视化UI控件文档的文件。

通过代码来看下它是怎么做的:

import React from 'react';
// 引入Button.jsx组件
import { Button } from './Button';
// 导出文档相关的说明
export default {
  // 文档标题,显示在Example目录下,名字叫Button
  title: 'Example/Button',
  // 显示的组件是Button
  component: Button,
  // 参数控制器的类型,后面会详说
  // control: 'color'意思是可以用一个选色盘来选择背景色
  argTypes: {
    backgroundColor: { control: 'color' },
  },
};

// Button的模板
const Template = (args) => <Button {...args} />;
// Template.bind({})根据模板生成另一个组件
export const Primary = Template.bind({});
// Primary的传参
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',
};

argTypes,是用来给参数指定用什么样的控制器的。

它在storybook内部有一套隐藏的配置,它会根据你写的propTypes

argTypes生成一种控制器。

比如PropTypes.bool就会显示成按钮切换,

PropTypes.onOf(['xx', 'yy'])就会显示成单选按钮,

如果这时候在argTypes中设置为control: 'select',就会变成下拉框选择。

可以理解为PropTypes的类型会默认显示出一种控制器,

而通过argTypes可以修改控制器为另一种形式。

说白了,都是为了配置控制器的。后面还会单独说argTypes,因为类型比较多。

在这里插入图片描述


未完待续…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/367586.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker之路(6.docker容器数据卷、具名挂载匿名挂载、权限挂载)

1. 什么是容器数据卷 如果数据都在容器中&#xff0c;那么容器删除后&#xff0c;数据就会丢失&#xff01; 所以希望容器的数据能够存到本地 容器之间可以又一个数据共享的技术&#xff01; Docker容器中产生的数据&#xff0c;可以同步到本地&#xff0c;这就是卷技术。 就是…

Nacos Ignore the empty nacos configuration and get it based on dataId

1.配置错误 dataId问题 启动日志&#xff1a; 使用properties格式的文件&#xff1a; Ignore the empty nacos configuration and get it based on dataId[xxx-server] & group[DEFAULT_GROUP] Ignore the empty nacos configuration and get it based on dataId[xxx-s…

【Redis中bigkey你了解吗?bigkey的危害?】

一.Redis中bigkey你了解吗&#xff1f;bigkey的危害&#xff1f; 如果面试官问到了这个问题&#xff0c;不必惊慌&#xff0c;接下来我们从什么是bigkey&#xff1f;bigkey划分的类型&#xff1f;bigkey危害之处&#xff1f; 二.什么是bigkey&#xff1f;会有什么影响&#xff…

九头蛇hydra爆破http示例

使用hydra执行http表单暴力破解 通过浏览器自带分析得知: 提交地址:http://10.0.0.115/student_attendance/ajax.php?action=login 提交方式:POST 提交数据:username=a&password=a 服务响应:3 根据以上收集的信息就可以使用hydra进行密码爆破 hydra 10.0.0.115 http…

【第一章:Spring概述、特点、IOC容器、IOC操作bean管理(基于xml方式创建对象,注入属性)】

第一章&#xff1a;Spring概述、特点、IOC容器、IOC操作bean管理&#xff08;基于xml方式创建对象&#xff0c;注入属性&#xff09; 1.Spring是什么&#xff1f; ①Spring是一款主流的java EE 轻量级开源框架。 ②广义的Spring&#xff1a;Spring技术栈&#xff0c;Spring不再…

华为OD机试题,用 Java 解【计算最大乘积】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

【基础算法】哈希表(开放寻址法)

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…

聚观早报|饿了么星选停止运营;百度2022财报全年营收1236.75亿元

今日要闻&#xff1a;饿了么星选停止运营&#xff1b;百度2022财报全年营收1236.75亿元&#xff1b;微软收购暴雪获力挺&#xff1b;全国首例&#xff01;这一代练平台被叫停&#xff1b;现代汽车已开始在美国生产电动汽车 饿了么星选停止运营 2 月 22 日&#xff0c;饿了么旗下…

使用Vite创建VUE项目

使用Vite来创建vue项目 很久没有接触前端的技术了&#xff0c;一下子就冒出来很多技术&#xff0c;有的根本没见过呀&#xff0c;vue变成了3&#xff0c;vue-cli也变得不好用了&#xff0c;说vite很好用&#xff0c;那就创建个项目试试吧。 有一点前提哈&#xff0c;电脑上要…

华为OD机试题,用 Java 解【磁盘容量排序】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

【100个 Unity实用技能】 | 将Dictionary字典中的数据序列化 到Unity Inspector监视器面板

Unity 小科普 老规矩&#xff0c;先介绍一下 Unity 的科普小知识&#xff1a; Unity是 实时3D互动内容创作和运营平台 。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者&#xff0c;借助 Unity 将创意变成现实。Unity 平台提供一整套完善的软件解决方案&#xff…

【vue2每日小知识】实现store中modules模块的封装与自动导入

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;省去我们store仓库中分模块时的需要每次导入index的问题 目录 【前言】在store中如何简…

UART 串口通信实验

目录 一、UART 简介 1、 UART 通信格式 二、I.MX6U UART 简介 1、硬件原理 2、寄存器 UARTx_UCR1(x1~8) UARTx_UCR2​ UARTx_UCR3​ UARTx_USR2​ 其他寄存器 三、代码编写 1、编写bsp_uart.h 2、编写bsp_uart.c 3、main 不管是单片机开发还是嵌入式 Linux 开发&a…

Kubernetes入门教程 --- 使用kubeadm进行集群安装

Kubernetes入门教程 --- 使用kubeadm和二进制安装1. Introduction1.1 架构图1.2 关键字介绍1.3 简述2. 使用Kubeadm Install2.1 申请三个虚拟环境2.2 准备安装环境2.3 配置yum源2.4 安装Docker2.5 时间同步2.6 安装组件2.7 部署集群2.8 Master安装网络插卡3. 查询状态3.1 查询n…

【数据库】一文讲清redis的主从复制

目录 主从复制 一&#xff0c; 主从复制原理 二&#xff0c;主从复制配置 1&#xff0c;一主双从 1、配置三个redis示例 2、配置主从 3、集群测试 2&#xff0c; 主从切换 哨兵模式 一&#xff0c; 什么是哨兵模式 二&#xff0c; 配置哨兵 三&#xff0c;启动哨兵 …

公网远程连接Oracle数据库【内网穿透】

文章目录1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程OracleOracle&#xff0c;是甲骨文公司的一款关系数据库管理系…

阅读笔记8——NMS

一、基本NMS 1. 处理过程 为了保证物体检测的召回率&#xff0c;对于同一个真实物体往往会有多于1个的候选框输出。但是多余的候选框会影响检测精度&#xff0c;因此需要利用NMS过滤掉重叠的候选框&#xff0c;基本的NMS方法利用得分高的边框抑制得分低且重叠程度高的边框。 如…

追梦之旅【数据结构篇】——详解C语言实现链栈

详解C语言实现链栈~&#x1f60e;前言&#x1f64c;整体实现内容分析&#x1f49e;1.头文件编码实现&#x1f64c;2.功能文件编码实现&#x1f64c;3.测试函数功能代码&#x1f64c;总结撒花&#x1f49e;&#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右…

再获最佳推荐,华为高端存储凭什么征服DCIG?

近日&#xff0c;全球著名技术分析机构DCIG发布《DCIG 2023-24高端存储阵列TOP5》报告&#xff0c;华为OceanStor Dorado 18000凭借可靠性、易用性和安全性等诸多优势&#xff0c;在DELL EMC、IBM、HPE、PureStorage等一众国际厂商中脱颖而出&#xff0c;荣获最佳推荐榜首。一直…

Linux——进程概念(进程状态)

目录 进程状态 三态模型 五态模型 七态模型 Example eg1:阻塞态&#xff1a;等待某种资源的过程 eg2:挂起态 Linux内核源代码 Linux进程状态查看 Linux运行状态 R运行状态&#xff08;running&#xff09;: S睡眠状态&#xff08;sleeping)&#xff1a; D磁盘休眠状…