手把手实战react + storybook组件库

2023-11-15

引入

在UI组件库的开发过程中,如何方便的展示组件,测试组件,编写文档呢?storybook就提供了这样一种工具,利用它我们可以更方便地进行UI组件开发。最近一直在研究react,react和storybook的碰撞会是怎么样的呢。下面将从零开始,运用storybook手把手撸一个react组件。

快速搭建react环境

首先,基于create-react-app快速搭建react环境

storybook有单独的webpack配置,有单独的服务器。它的webpack配置类似于create-react-app。

npm i -g create-react-app
create-react-app storybook-demo
cd storybook-demo
yarn start
复制代码

在命令行工具中运行上述命令,快速生成了一个已经配置好react环境的storybook-demo项目文件,进入该项目文件,通过yarn start启动webpack服务器,操作无误的话,浏览器将会自动打开如下页面:

安装storybook

搭配好react环境后,安装storybook插件

npm i --save-dev @storybook/react
复制代码

配置npm scripts

之前已经提到过,storybook有单独的服务器,可以在npm scripts添加相关命令脚本,方便之后启动服务。

打开package.json,在scripts属性中添加storybook命令,如下:

{
  "scripts": {
    "storybook": "start-storybook -p 9001 -c .storybook"
  }
}
复制代码

注意,脚本中-p 9001表示启动服务的端口号是9001,-c .storybook表示配置文件的目录,这里将配置文件设置为根目录下的.storybook文件夹。

创建配置文件config.js

在项目根目录中新建.storybook目录,并在里面添加config.js文件。 基本的配置主要是用来告诉storybook你的stories的存放位置。 我们将stories放在src目录下。

// config.js
import { configure } from '@storybook/react';

function loadStories() {
  require('../src/stories/index.js');
}

configure(loadStories, module);

// 
复制代码

创建stories

接下来登场的就是stories,这是storybook的核心所在。 打开src目录,创建stories文件夹,同时可以创建components文件夹。 在components中,创建一个Button.js组件,在stories添加button.stories

// .storybook/config.js中修改路径
import { configure } from '@storybook/react';

function loadStories() {
  require('../src/stories/button.stories.js');
}

configure(loadStories, module);

// src/stories/button.stories.js
import React from 'react';
import { storiesOf } from '@storybook/react';
import {Button} from '../components/Button';

storiesOf('Button', module)
  .add('基本用法',() => (
    <Button>按钮</Button>
  ))
  
// src/components/Button.js
import React from 'react'

export class Button extends React.Component{
  constructor (props) {
    super(props)    
  }

  render () {
    return (
      <button style={{backgroundColor: '#fff', border: '1px solid #ccc'}}>{this.props.children}</button>
    )
  }
}

复制代码

这里,在config.js中仅引入了button的story,如果组件比较多,有没有批量引入stories的方法呢? 可以使用require.context方法,此处将src/stories文件夹中以.stories.js为后缀的文件批量导入。

require.context是webpack的方法,具体参考require.context

import { configure } from '@storybook/react';

const req = require.context('../src/stories', true, /\.stories\.js$/)

function loadStories() {
  req.keys().forEach((filename) => req(filename))
}

configure(loadStories, module);
复制代码

启动storybook服务

yarn storybook
复制代码

在浏览器中打开http://localhost:9001,成功后会出现以下页面,证明你成功了!

添加额外组件信息

想要形成一个完整的组件文档,需要展示出组件的各种信息,上面展示的信息是远远不够的。为此,可以安装addon-info插件。插件更多信息参考addon-info

npm i -D @storybook/addon-info
复制代码

在button.stories.js文件中引入withInfo方法,参数可以是字符串,支持markdown

// src/stories/button.stories.js
import { withInfo } from '@storybook/addon-info';

storiesOf('Button', module)
  .add('基本用法',
    withInfo(`
      description or documentation about my component, supports markdown
    
      ~~~js
      <Button>测试按钮</Button>
      ~~~
    
    `)(() =>
      <Button>测试按钮</Button>
    )
  )
复制代码

此时浏览器页面更新如下。点击右侧的show info按钮,可以看到我们添加的组件信息。

使用markdown

可以将组件信息抽出来放在md文件中。直接上代码:

// src/stories/button.md
description or documentation about my component, supports markdown
<Button>测试按钮</Button>
复制代码
// src/stories/button.stories.js
import { withInfo } from '@storybook/addon-info';
import button from './button.md'

storiesOf('Button', module)
  .add('基本用法',
    withInfo({
      markdown: button
    })(() =>
      <Button>测试按钮</Button>
    )
  )
复制代码

组件信息单页显示

如何直接让组件信息在当前页面显示呢?在withInfo配置中添加inline:true

storiesOf('Button', module)
  .add('基本用法',
    withInfo({
      inline: true,
      markdown: button
    })(() =>
      <Button>测试按钮</Button>
    )
  )

复制代码

最后

storybook功能还有很多,有兴趣的小伙伴可以再深入研究研究。

storybook官网:storybook

更多的addon插件可以参考:addon插件集合

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

手把手实战react + storybook组件库 的相关文章

随机推荐

  • 每日必看的五个产品科技类网站?

    1 Github 看看 GitHub 社区今天最热门的是什么 https github com trending 2 v2ex 会有一些新的互联网产品发布在这里 偶尔会附带免费的激活码 3 producthunt 看看今天有什么新的创业产品
  • Maven Pom设置简单项目打jar包时的入口类

    Maven Pom设置简单项目打jar包时的入口类 有时 不使用框架的简单的项目也要以jar包的形式发布和使用 如果不知道如何在pom中设置项目的入口类 就比较麻烦 在pom文件中添加如下代码 就可以设置项目的入口类了 当然 入口类中要有m
  • miniconda的安装和python环境搭建

    文章目录 前言 下载minianaconda 安装和配置 安装注意 配置 更改镜像源 创建虚拟环境和激活 conda常用指令 前言 最近想用python去写一个写ini配置文件的工具 由于电脑现在的环境是python2的 想用python3
  • AES加密出现Error: Malformed UTF-8 data报错的解决方法

    按我上一章 vue java 使用AES 前后端加密解密 址址 https blog csdn net weixin 42124196 article details 88416488 文章进行aes加密的项目 当页面获取数据时一直出现Er
  • java aio和nio的区别

    AIO 是彻底的异步通信 NIO 是同步非阻塞通信 有一个经典的举例 烧开水 假设有这么一个场景 有一排水壶 客户 在烧水 AIO的做法是 每个水壶上装一个开关 当水开了以后会提醒对应的线程去处理 NIO的做法是 叫一个线程不停的循环观察每
  • OpenMV的程序烧录

    OpenMV官方烧录教程 OpenMV脱机运行 星瞳科技 利用数据线连接OpenMV和电脑 如果OpenMV闪烁绿灯 之后是白灯 再结束 表示OpenMV连接电脑成功 打开OpenMV IDE 点击左下方的这个 或者按Ctrl E连接上Op
  • Acwing-3443. 学分绩点

    include
  • 超微主板升级bios_超微 X10DAi安装黑苹果10.13.6 OC引导

    配置 处理器 英特尔 Xeon 至强 E5 2650 v4主板 超微 X10DAI Wellsburg 内存 64 GB 三星 DDR4 2133MHz 主硬盘 Lexar 500GB SSD 500 GB 固态硬盘 主显卡 Nvidia
  • openwrt php 调用,openwrt在脚本中调用UCI接口, 非常值得学习

    bin sh Copyright C 2006 2013 OpenWrt org Copyright C 2006 Fokus Fraunhofer Copyright C 2010 Vertical Communications debu
  • nvidia tx/xavier/orin硬件平台上添加开机启动程

    概述 随着NVIDIA的xavier及orin系列硬件平行推出 自动驾驶车端处理器也逐渐频繁开发及使用 开机脚本使用 etc profile 通常在系统登录时 会执行 多次登录 多次执行 xavier上增加开机启动脚本 不能在 etc pr
  • 记录解压zip文件

    zip文件有30G unzip不能用 改用jar解压 unzip 解压 JPEGImages zip 文件时 异常提示如下 Archive dataset test rgb zip End of central directory sign
  • 隐藏Chrome浏览器新增标签页下方的快捷方式缩略图

    作为强迫症患者不喜欢搜索栏下方还有多余的东西 看着8个最近访问的快捷方式缩略图太不舒服了 在网上搜索了一堆方法 最有效的是替换一个PAK文件 但是过程有些繁琐 自己摸索后发现了一个简单的方法 在这记录一下以防自己忘记 查看设置中搜索引擎的地
  • 8种常见的排序算法-----你值得掌握(很细,很全)

    目录 一 排序的概念 二 常见的排序 三 常见排序算法的实现 1 插入排序 1 1 基本思想 1 2直接插入排序动态图 1 3直接插入排序的代码实现 2 希尔排序 2 1基本思想 2 2希尔排序过程 2 3希尔排序代码实现 2 4gap的选
  • CVPR2019接收结果公布了,但CVPR 2018的那些论文都怎么样了?

    CVPR 作为计算机视觉三大顶级会议之一 一直以来都备受关注 被 CVPR 收录的论文更是代表了计算机视觉领域的最新发展方向和水平 今年 CVPR 2019 将于美国洛杉矶举办 上个月接收结果公布后 又引起了 CV 届的一个小高潮 一时间涌
  • arxiv文章下载

    使用中科院arxiv的镜像地址 http xxx itp ac cn 地址由 https arxiv org pdf 1512 02325 pdf 切换到 http xxx itp ac cn pdf 1512 02325 pdf
  • 异步通知实验(信号)

    目录 异步通知 异步通知简介 驱动中的信号处理 应用程序对异步通知的处理 硬件原理图分析 实验程序编写 修改设备树文件 程序编写 编写测试APP 运行测试 编译驱动程序和测试APP 运行测试 在前面使用阻塞或者非阻塞的方式来读取驱动中按键值
  • 单片机知识总结,51中断秘籍(外部中断,定时器中断,定时器计数),串口通信秘籍【1000字】【原创】

    文章目录 1 普中科技开发板 2 中断寄存器配置详解 截图 3 中断寄存器配置文字总结 4 文字总结2 5 文字总结3 6 代码函数示例 1 外部中断0初始化函数 2 外部中断1初始化函数 3 定时器中断0初始化函数 4 定时器中断1初始化
  • 大语言模型之一 Attention is all you need ---Transformer

    大语言模型已经在很多领域大显身手 其应用包括只能写作 音乐创作 知识问答 聊天 客服 广告文案 论文 新闻 小说创作 润色 会议 文章摘要等等领域 在商业上模型即产品 服务即产品 插件即产品 任何形态的用户可触及的都可以是产品 商业付费一般
  • 性能:15个JavaScript本地存储技术的函数库和工具

    当构建更复杂的JavaScript应用程序运行在用户的浏览器是非常有用的 它可以在浏览器中存储信息 这样的信息可以被共享在不同的页面 浏览会话 在最近的过去 这将有可能只被cookies文本文件保存到用户的计算机 管理这些JavaScrip
  • 手把手实战react + storybook组件库

    引入 在UI组件库的开发过程中 如何方便的展示组件 测试组件 编写文档呢 storybook就提供了这样一种工具 利用它我们可以更方便地进行UI组件开发 最近一直在研究react react和storybook的碰撞会是怎么样的呢 下面将从