想写出复用性强的组件?快来试试 Storybook 吧

news2024/11/19 3:48:21

简介

StorybookUI 组件的开发环境,它允许开发者浏览组件库,查看每个组件的不同状态,以及交互地开发和测试组件。

Storybook 可帮助你记录组件以供重用,并自动对组件进行可视化测试以防止出现错误。

开始

在对 Storybook 有了大致的了解之后,下面就让我们把 Storybook 启动起来吧!

Storybook 需要安装到已经设置了框架的项目中。它不适用于空项目。这里我使用的是 React,首先我们进入空项目安装 React,这里推荐使用官方脚手架安装:

npx create-react-app my-app 

安装完成后进入项目目录:

cd my-app 

之后再安装 Storybook,命令如下:

npx storybook init 

安装完成后将 Storybook 启动:

npm run storybook 

启动成功后,页面如下:

在该项目的 src 下,我们可以看到 stories 文件夹,里面有一些后缀为 .stories.jsx 的文件,分别对应着页面中的 ButtonHeaderPage 组件。这些 story 以格式 (CSF) 编写——这是一种基于 ES6 模块的标准,用于编写组件示例。

组件

我们以 Button 组件为例进行分析,默认情况下,页面上的 Button 组件如下图:

可以看到 Canvas 部分用来实时显示组件,Controls 用来控制组件,例如可以改变按钮的背景颜色、大小等。当我们点击按钮时,在 Actions 中会打印点击事件,如下图显示:

现在我们大致清楚了 Storybook 是可以对组件进行一些调试的,那么如果我们需要设计一些可以高度复用的组件,该怎么通过 Storybook 来设计呢?

对于开发者来说,设计出高度复用的组件可以为以后的开发节约大量的时间,写出更优质的组件,这样的组件具有高内聚、低耦合的特点,在大型项目中写出这样的组件则显得尤为重要!

在需求中,设计按钮组件时,有固定因素和可变因素,例如按钮的大小,颜色以及按钮的内容等等都是可变因素;固定因素有比如按钮的背景图片。保留固定元素将可变因素进行动态转化可以达到组件高度重用的目的。

Button.stories.jsx 中,我对默认代码进行了修改,通过 args 对组件 Button 进行传参,为了方便理解,其中 args 只包括了 primarylabel 两个参数(即是否为主要按钮和按钮内容),代码如下:

import React from 'react';

import { Button } from './Button';

// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
export default {title: 'Example/Button',component: Button
};

// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
const Template = (args) => <Button {...args} />;

export const Primary = Template.bind({});
// More on args: https://storybook.js.org/docs/react/writing-stories/args
Primary.args = {primary: true,label: 'Button'
}; 

Button.jsx 中,我们将传入的参数进行解构,这里直接解构出 primarylabel,做了类型约束:

import React from 'react';
import PropTypes from 'prop-types';
import './button.css';

/**
 * Primary UI component for user interaction
 */
export const Button = ({ primary, label }) => {const mode = primary ? 'storybook-button--primary' : 'storybook-button--secondary';return (<buttontype="button"className={['storybook-button', `storybook-button--medium`, mode].join(' ')}>{label}</button>);
};

Button.propTypes = {/** * Is this the principal call to action on the page? */primary: PropTypes.bool,/** * Button contents */label: PropTypes.string.isRequired
};

Button.defaultProps = {primary: false
}; 

页面如下图:

可以看到,Controls 中只保留了 primarylabel,这是因为我只对这两个参数进行了相关操作(定义、传递以及类型约束)。通过这样的方法,把可变因素当作参数进行传递,组件的复用性是不是大大提高了呢,其实还可以进一步提高,从上述代码来看 Button 组件的样式是写在其他文件的,我们可以把样式写在 Button.jsx 中,这样一个文件就对应了一个组件,便于管理。样式的编写推荐使用 Emotion,官方地址如下:Emotion

通过这种方法来编写组件,追求高复用性,养成一种编写优质代码的习惯,是不是非常的nice呢!

总结

以上就是笔者在阅读文档以及使用 Storybook 后的一些记录,也是笔者对 Storybook 的一些个人见解,如果大家觉得还可以的话,不要忘了点赞哟~

最后

最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

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

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

相关文章

halcon measure_pos和measure_pairs详解

这两个算子作为halcon一维测量的关键&#xff0c;看了这两个算子的多个博客&#xff0c;也没搞清楚里面几个参数的意义和测量的原理&#xff0c;决定自己详细试一下&#xff0c;将测试的过程详细记录下来&#xff0c;供以后需要参考的朋友使用&#xff0c;本文将从以下几个点说…

使用bat脚本运行python脚本,bat出现闪退,怎么解决?

前言 本文是该专栏的第4篇,后面会持续分享python的各种干货知识,值得关注。 工作上为了方便,很多时候我们会设置一个bat脚本来双击运行python脚本,这样既方便又能在工作上节约大量时间。 但是,你或许会碰到这样的情况,当双击bat脚本的时候,bat窗口界面会直接出现闪退关…

DM8设置自动备份,达梦数据库,自动备份。详细步骤。常用命令,启动关闭数据库,查看DMAP状态

常用命令 DmServiceDAMENG.service改成自己bin目录下文件名 运维常见问题&#xff0c;官方文档 注意事项 登录客户端工具&#xff0c;一定要使用SYSDBA用户进行下面的客户端操作 登录数据库主机&#xff0c;一定要使用安装数据库时创建的dmdba用户 定时备份前请先配置本地…

引入新模块都在用这个注解,它是如何生效的?|原创

本文讲解了Enable 类注解是如何生效的以及其核心注解 Import 的原理&#xff0c;并且用 EnableAsync 注解来举例。点击上方“后端开发技术”&#xff0c;选择“设为星标” &#xff0c;优质资源及时送达在项目开发的过程中&#xff0c;我们会遇到很多名字为 Enablexxx 的注解&a…

OA系统解决方案

一、OA系统解决方案介绍 OA系统&#xff0c;即办公自动化系统&#xff08;Office Assistant简称OA&#xff09;&#xff0c;它是一个集成了企业信息发布、公文与信息管理、公文处理、知识管理、内部通讯、协同办公等办公与管理应用功能一体的协同 办公系统。OA系统解决方案则是…

Linux——详解共享内存shared memory

目录 一.共享内存介绍 &#xff08;一&#xff09;.什么是共享内存 &#xff08;二&#xff09;.共享内存优点 &#xff08;三&#xff09;.共享内存缺点 二.共享内存使用 &#xff08;一&#xff09;.创建—shmget ①key ②size ③shmflg ④返回值 &#xff08;二&…

CRMEB电商商城系统腾讯云ECS服务器安装配置搭建教程文档

一、推荐使用宝塔Linux面板&#xff0c;简单好用。二、放行服务器端口。详细步骤&#xff1a; 1.登录腾讯云服务器&#xff0c;点击右上角“控制台” 2.我的资源&#xff0c;点击进入云服务器 3.进入实例列表&#xff0c;选择您要安装的服务器&#xff0c;点击更多 4.选择重装…

Hadoop 如何保证自己的江湖地位?Yarn 功不可没

前言 任何计算任务的运行都离不开计算资源&#xff0c;比如 CPU、内存等&#xff0c;那么如何对于计算资源的管理调度就成为了一个重点。大数据领域中的 Hadoop 之所以一家独大&#xff0c;深受市场的欢迎&#xff0c;和他们设计了一个通用的资源管理调度平台 Yarn 密不可分&a…

Metal每日分享,四维向量偏移滤镜效果

本案例的目的是理解如何用Metal实现图像4维向量颜色效果滤镜,通过对像素点颜色进行4维向量叠加运算得到新的像素点; Demo HarbethDemo地址实操代码 // 暖色系 let filter = C7ColorVector4(vector: Vector4.Color.warm)// 方案1: ImageView.image = try? BoxxIO(element: o…

浅谈字节码增强技术系列1-字节码增强概览

作者&#xff1a;董子龙 前言 前段时间一直想参照lombok的实现原理写一篇可以生成业务单据修改记录插件的专利&#xff0c;再查阅资料的过程中&#xff0c;偶然了解到了字节码增强工具-byteBuddy。但是由于当时时间紧促&#xff0c;所以没有深入的对该组件进行了解。其实再我…

一文搞定Pandas核心概念之DataFrame

DataFrame概述 DataFrame 是一个表格型的数据结构&#xff0c;它含有一组有序的列&#xff0c;每列可以是不同的值类型&#xff08;数值、字符串、布尔型值&#xff09;。DataFrame 既有行索引也有列索引&#xff0c;它可以被看做由 Series 组成的字典&#xff08;共同用一个索…

麒麟系统下基于卫星的NTP网络授时服务器方案

麒麟系统下基于卫星的NTP网络授时服务器方案 1、 麒麟系统NTP授时方案 设计思路&#xff1a; 在通用的麒麟服务器内部固定一块北斗卫星接收模块并引出卫星天线接口&#xff0c;卫星模块接收北斗卫星数据并解码输出时间数据&#xff08;NMEA0183串口数据&#xff09;&#xff…

Linux编译静态库.a脚本(很low)

比如目录下有这几个源文件&#xff0c;我们要把其中带箭头的三个源文件编译打包成静态库文件 然后在当前目录创建脚本make_lib.sh&#xff0c;并赋可执行权限chmod 777 make_lib.sh #!/bin/bash # 在下面将需要编译成静态库的源文件名填进去 list"ky_ai_api ky_ai_pars…

基于PHP的旅游网站的开发与设计

目录 第1章 绪论 3 1.1 课题背景 3 1.2 电子商务的发展趋势 3 1.3企业网站的建立及电子商务的意义 4 第2章 电子商务简介 6 2.1 电子商务的来临 6 2.2 电子商务的概念 6 2.3 电子商务的分类 7 2.4 电子商务的特性 8 2.5 电子商务的结构 11 2.6 电子商务在中国的发展 11 2.7 本章…

Vue生命周期概述

Vue生命周期概述1 概述2 初始阶段3 挂载阶段4 更新阶段5 销毁阶段6 总结1 概述 每个Vue组件实例在创建时都需要经历一系列的初始化步骤&#xff0c;比如设置好数据侦听&#xff0c;编译模板&#xff0c;挂载实例到DOM&#xff0c;以及在数据改变时更新DOM。在此过程中&#xf…

微服务门神-网关了解

引言 书接上篇 微服务守护神-Sentinel-其他 &#xff0c;讲完微服务守护神-Sentinel之后&#xff0c;接下来就是微服务门神-网关组件&#xff1a;Gateway 问题引入 小伙伴们都知道在微服务架构中&#xff0c;一个系统会被拆分为很多个微服务&#xff0c;每一个微服务都能对外…

风电场数字孪生的应用案例

在我国“十四五”现代能源中明确规划&#xff0c;要大规模发展风电能源。与此同时电力行业也在加紧通过数字孪生等新一代信息技术推动电力能源行业智能化改造和数字化建设&#xff0c;不夸张地说数字孪生技术&#xff0c;数字孪生的应用不仅能够提高风电场项目建设的设计、施工…

PPa-GO/NPs/PEG/DSPE焦脱镁叶绿酸-a修饰氧化石墨烯/纳米粒子/聚乙二醇/磷脂/细胞膜合成

小编分享了PPa-GO/NPs/PEG/DSPE焦脱镁叶绿酸-a修饰氧化石墨烯/纳米粒子/聚乙二醇/磷脂/细胞膜合成方法相关知识&#xff0c;来学习&#xff01; 焦脱镁叶绿酸-a衍生物合成方法: 通过酸解反应从叶绿素a得到焦脱镁叶绿酸a,羧基保护后插入Zn2形成金属配合物,采用2,3-二氯-5,6-二氰…

window.open跳转页面传参接参

<el-table-column fixed"right" header-align"center" align"center" prop"action" label"操作" width"180px"><template slot-scope"scope"><el-button type"primary" size&…

QT学习笔记(上)

QT学习笔记&#xff08;上&#xff09; 文章目录QT学习笔记&#xff08;上&#xff09;1. 窗口和按钮2. 创建一个自定义的QPushButton2.1 mypushbutton.h2.2 mypushbuttion.cpp2.3 mainwindow.cpp引用mypushbutton3. QT坐标原点4. 信号与槽5. 自定义信号和槽6. 信号和槽的重载P…