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

news2025/7/29 14:41:21

storybook

  • 回顾
  • 继续说说用法
    • 配置文件介绍


回顾

上篇博客地址:

https://blog.csdn.net/tuzi007a/article/details/129192502

说了部分用法。


继续说说用法

配置文件介绍

开发环境的配置都在.storybook目录中,里面包含了2个文件

main.js
preview.js

先看main.js文件。

该文件是在安装了storybook后自动生成的,里面本身就包含了支持当前框架在开发环境的配置,

我们所要做的是在配置上进行补充,比如支持less sass scss等,增加addon插件,修改

stories加载目录,修改打包工具版本和对应功能等。

module.exports = {
  stories: [ // 生成可视化UI控件文档时,会加载哪些文件
    // stories目录下的所有.stories.mdx文件
    "../stories/**/*.stories.mdx",
    // stories目录下的所有.stories.js .jsx .ts .tsx文件
    "../stories/**/*.stories.@(js|jsx|ts|tsx)"
  ],
  addons: [
	// 用于配置storybook的插件
	// 在安装storybook后,这里会自动加载一些常用插件
  ],
  babel: async (options) => {
	// ...options
	// babel的配置我们一般在根目录下的`.babelrc.js`中处理
  }, 
  // 你使用的框架对应的storybook版本
  // 比如react框架对应的storybook版本是"@storybook/react"
  framework: "xxx", 
  // 核心打包工具配置
  // 比如使用storybook的哪个版本,用webpack5的哪个版本打包,是否懒加载,是否要缓存等
  core: {
    builder: {
      name: 'webpack5',
      options: {
        lazyCompilation: true,
        fsCache: true
      }
    },
  },
  webpackFinal: async (config, { configType }) => {
	// 这里写入webpack的补充配置
	// 不要试图去修改入口和出口
	// config是一个配置对象,要配置哪个参数,就从config中调用配置项,然后进行追加,
	// 比如config.module.rules.push({...})用来增加loader的配置
	// config.devtool = “xxx-source-map”用来增加source-map的配置
	// config.plugins.push(xxx)用来增加webpack plugin的配置

	// 最后要返回配置内容 固定写法
	return config;
  }
}

再来看看preview.js文件

它主要用于控制story的渲染,在渲染story时提供一些数据上的配置。

它有3个配置项,

  • decorators
  • parameters
  • globalTypes

下面进行一一介绍。

decorators

它是一个数组,负责为story提供渲染数据,可以对单个story使用,也可以对某个组件使用,

还可以放在全局配置里,因此它有如下多种写法,

第一种:对单个story使用

// Button.stories.jsx

import React from 'react';
import { Button } from './Button';

export default {
  title: "Example/Button",
  component: Button

const Template = (args) => <Button {...args} />;
export const Primary = Template.bind({});
Primary.decorators = [
  (Story) => (
    <div style={{ margin: '3em' }}>
      <Story />
    </div>
  ),
];

配置结果:
当前如果选择查看Primary这个story的话,会增加3emmargin
在这里插入图片描述
而选择查看其他story的时候则不会:
在这里插入图片描述

第二种,对以Button组件为模板的story使用

// Button.stories.jsx

import React from 'react';
import { Button } from './Button';

export default {
  title: 'Button',
  component: Button,
  decorators: [
    (Story) => (
      <div style={{ margin: '3em' }}>
        <Story />
      </div>
    ),
  ],
};

配置后,可以看到所有以Button为模板的story,它们的margin都增加了3em:
在这里插入图片描述
在这里插入图片描述
而以其他组件为模板的story则不会:
在这里插入图片描述

第三种,对全局的story和组件使用,这需要在.storybook/preview.js中配置:

// .storybook/preview.js

import React from 'react';

export const decorators = [
  (Story) => (
    <div style={{ margin: '3em' }}>
      <Story />
    </div>
  ),
];

然后就可以看到,所有的story都增加了3em的margin:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


parameters

它是一个对象,是用来控制如下内容的:
在这里插入图片描述
比如背景色选项,事件,控制器显示等。

先来看下安装storybook后自动生成的.storybook/preview.js下关于parameters全局配置文件:

export const parameters = {
  // 配置事件显示,如果组件中的props参数是on+大写字母,就当作事件处理,比如onClick
  actions: { argTypesRegex: "^on[A-Z].*" },
  // 控制器
  controls: {
    matchers: {
      // 如果props参数里有background或者color,就把控制器显示成选色器的样子
      color: /(background|color)$/i,
      // 如果props参数是Date,就把该参数对应的控制器显示成时间选择器的样式
      date: /Date$/,
    },
  },
}

parameters同样有三种配置方式,分别对单个story生效、对以某个组件为模板的story生效

和全局生效。下面就以backgrounds配置项为例来说说。就是这里:

在这里插入图片描述

该配置项用来控制可视化UI文档的背景主题色,默认有两种,lightdark,默认选择是light

也就是图中显示的白色,选择dark,就会显示成黑色:
在这里插入图片描述
现在要重新设置选择项,让主题色有红色,绿色和蓝色的选择项。

第一种方式:对单个story配置:

// Button.stories.jsx

import { Button } from './Button';

export default {
  title: 'Button',
  component: Button,
};

const Template = (args) => <Button {...args} />;

export const Primary = Template.bind({});
Primary.args = {
  primary: true,
  label: 'Button',
};
Primary.parameters = {
  backgrounds: {
    values: [
      { name: 'red', value: '#f00' },
      { name: 'green', value: '#0f0' },
      { name: 'blue', value: '#00f' },
    ],
  },
};

此时选择查看Primary这个story,就可以选择背景色了:

点击这里选择背景色:
在这里插入图片描述
可以看到可分别选择红黄蓝三种颜色,而其他story下,就不具备这个选择。

第二种方式,对以某个组件为模板的story生效:

import React from 'react';
import { Button } from '../src';

export default {
  title: 'Example/Button',
  component: Button,
  argTypes: {
    backgroundColor: { control: 'color' },
  },
  parameters: {
    backgrounds: {
      values: [
        { name: 'red', value: '#f00' },
        { name: 'green', value: '#0f0' },
        { name: 'blue', value: '#00f' },
      ],
    },
  }
};

第三种方式,就是在preview.js中配置全局主题背景色

// .storybook/preview.js

export const parameters = {
  backgrounds: {
    values: [
      { name: 'red', value: '#f00' },
      { name: 'green', value: '#0f0' },
    ],
  },
};

globalTypes

这个是全局生效的配置,可以设置主题色,工具条等。

可参考文档:

https://storybook.js.org/docs/react/essentials/toolbars-and-globals

全局配置示例:

// .storybook/preview.js

export const globalTypes = {
  theme: { // 主题
    name: 'Theme',
    description: 'Global theme for components',
    defaultValue: 'light',
    toolbar: {
      icon: 'circlehollow',
      // Array of plain string values or MenuItem shape (see below)
      items: ['light', 'dark'],
      // Property that specifies if the name of the item will be displayed
      showName: true,
      // Change title based on selected value
      dynamicTitle: true,
    },
  },
};

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

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

相关文章

STM32 触摸屏移植GUI控制控件

目录 1、emWin 支持指针输入设备。 2、 模拟触摸屏驱动 3、实现触摸屏的流程 3.1 实现硬件函数 3.2 实现对GUI_TOUCH_Exec()的定期调用 3.3 使用上一步确定的值&#xff0c;在初始化函数LCD_X_Config&#xff08;&#xff09;当中添加对GUI_TOUCH_Calibrate()的调用 4、…

Kubernetes入门教程 --- 使用二进制安装

Kubernetes入门教程 --- 使用二进制安装1. Introduction1.1 架构图1.2 关键字介绍1.3 简述2. 使用Kubeadm Install2.1 申请三个虚拟环境2.2 准备安装环境2.3 配置yum源2.4 安装Docker2.4.1 配置docker加速器并修改成k8s驱动2.5 时间同步2.6 安装组件3. 基础知识3.1 Pod3.2 控制…

【一些回忆】2022.02.26-2023.02.26 一个普通男孩蜕变的365天

&#x1f483;&#x1f3fc; 本人简介&#xff1a;男 &#x1f476;&#x1f3fc; 年龄&#xff1a;18 &#x1f91e; 作者&#xff1a;那就叫我亮亮叭 &#x1f4d5; 专栏&#xff1a;一些回忆 为什么选择在这个时间节点回忆一下呢&#xff1f; 一是因为今天距离2023高考仅剩1…

双指针法应用总结

一、双指针法&#xff08;一&#xff09;概况1.类型&#xff1a;快慢指针&#xff08;相同方向循环&#xff09;、对撞指针&#xff08;相反方向循环&#xff09;、滑动窗口2.用途&#xff1a;提高效率&#xff0c;通常能将将O(n^2)的时间复杂度&#xff0c;降为O(n)3.可应用的…

selenium基本操作

爬虫与反爬虫之间的斗争爬虫&#xff1a;对某个网站数据或图片感兴趣&#xff0c;开始抓取网站信息&#xff1b;网站&#xff1a;请求次数频繁&#xff0c;并且访问ip固定&#xff0c;user_agent也是python&#xff0c;开始限制访问&#xff1b;爬虫&#xff1a;通过设置user_a…

数据库浅谈之 DuckDB AGG 底层实现

数据库浅谈之 DuckDB AGG 底层实现 HELLO&#xff0c;各位博友好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 这里是数据库浅谈系列&#xff0c;收录在专栏 DATABASE 中 &#x1f61c;&#x1f61c;&#x1f61c; 本系列阿呆将记录一些数据库领域相关的知…

离线维基百科阅读器Kiwix Serve

本文软件是网友 刘源 推荐的&#xff0c;因为他已经安装成功了&#xff0c;所以老苏拖拖拉拉的就从去年拖到了现在&#xff1b; &#x1f602; 什么是 Kiwix ? Kiwix 是一个用于浏览离线内容的自由开源浏览器&#xff0c;最初用于离线浏览维基百科。Kiwix 可以读取以压缩形式存…

[神经网络]基干网络之VGG、ShuffleNet

一、VGG VGG是传统神经网络堆叠能达到的极限深度。 VGG分为VGG16和VGG19&#xff0c;其均有以下特点&#xff1a; ①按2x2的Pooling层&#xff0c;网络可以分成若干段 ②每段之内由若干same卷积操作构成&#xff0c;段内Feature Map数量固定不变&#xff1b; ③Feature Map按2的…

对个人博客系统进行web自动化测试(包含测试代码和测试的详细过程)

目录 一、总述 二、登录页面测试 一些准备工作 验证页面显示是否正确 验证正常登录的情况 该过程中出现的问题 验证登录失败的情况 关于登录界面的总代码 测试视频 三、注册界面的自动化测试 测试代码 过程中出现的bug 测试视频 四、博客列表页测试&#xff08;…

【Leedcode】数据结构中链表必备的面试题(第四期)

【Leedcode】数据结构中链表必备的面试题&#xff08;第四期&#xff09; 文章目录【Leedcode】数据结构中链表必备的面试题&#xff08;第四期&#xff09;1.题目2.思路图解(1)思路一(2)思路二3.源代码总结1.题目 相交链表&#xff1a; 如下&#xff08;示例&#xff09;&…

小白福利!我开发了一个快速部署库

1、开发背景 很多入门的同学&#xff0c;在跟着视频敲完代码之后&#xff0c;在打包出来的产物犯了难 如果是 hash 路由&#xff0c;要么使用后端部署&#xff0c;要么使用 github 或者 gitee 提供的静态部署服务如果是 history 路由&#xff0c;那只能使用后端框架进行部署&a…

内网渗透(五十三)之域控安全和跨域攻击-利用域信任密钥获取目标域控

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

前端学习日记——Vue之Vuex初识(一)

前言 学习前端一段时间了&#xff0c;因为一直是做Python开发&#xff0c;所以凭借着语言的通性学习Javascript、Vue轻快很多&#xff0c;但一些碎片化的知识及插件的使用方法还是需要记录一下&#xff0c;时而复习&#xff0c;形成系统化的知识体系&#xff08;PS&#xff1a;…

【Linux线程池】

Linux线程池Linux线程池线程池的概念线程池的优点线程池的应用场景线程池的实现Linux线程池 线程池的概念 线程池是一种线程使用模式。 线程过多会带来调度开销&#xff0c;进而影响缓存局部和整体性能&#xff0c;而线程池维护着多个线程&#xff0c;等待着监督管理者分配可并…

JavaScript if…else 语句

条件语句用于基于不同的条件来执行不同的动作。条件语句通常在写代码时&#xff0c;您总是需要为不同的决定来执行不同的动作。您可以在代码中使用条件语句来完成该任务。在 JavaScript 中&#xff0c;我们可使用以下条件语句&#xff1a;if 语句 - 只有当指定条件为 true 时&a…

【企业云端全栈开发实践-3】Spring Boot文件上传服务+拦截器

本节目录一、静态资源访问二、文件上传原理三、拦截器3.1 拦截器定义代码3.2 拦截器注册一、静态资源访问 使用IDEA创建Spring Boot项目时&#xff0c;会默认创建classpath://static/目录&#xff0c;静态资源一般放在这个目录下即可。 如果默认的静态资源过滤策略不能满足开…

做独立开发者,能在AppStore赚到多少钱?

成为一名独立开发者&#xff0c;不用朝九晚五的上班&#xff0c;开发自己感兴趣的产品&#xff0c;在AppStore里赚美金&#xff0c;这可能是很多程序员的梦想&#xff0c;今天就来盘一盘&#xff0c;这个梦想实现的概率有多少。 先来了解一些数据&#xff1a; 2022年5月26日&am…

目标跟踪系列总结

目标跟踪算法&#xff1a; sort算法: sort算法流程图 关联成功的检测box与追踪box处理&#xff1a;使用检测的box对追踪结果进行KalmanFilter权重以及参数更新&#xff0c;同时记录关联追踪box的计数次数&#xff1b; 未关联成功的box处理&#xff1a;对检测的box进行KalmanF…

C++【内存管理】

文章目录C内存管理一、C/C内存分布1.1.C/C内存区域划分图解&#xff1a;1.2.根据代码进行内存区域分析二、C内存管理方式2.1.new/delete操作内置类型2.2.new和delete操作自定义类型三、operator new与operator delete函数四、new和delete的实现原理4.1.内置类型4.2.自定义类型4…

如何利用有限的数据发表更多的SCI论文?——利用ArcGIS探究环境和生态因子对水体、土壤和大气污染物的影响

SCI的写作和发表是科研人提升自身实力和实现自己价值的必要途径。“如何利用有限的数据发表更多的SCI论文&#xff1f;”是我们需要解决的关键问题。软件应用只是过程和手段&#xff0c;理解事件之间的内在逻辑和寻找事物之间的内在规律才是目的。如何利用有限的数据发表更多的…