为了账号安全,请及时绑定邮箱和手机立即绑定

深入浅出:从零开始学习 storybook 基础教程

标签:
杂七杂八
简介

什么是 storybook?

storybook 是一个开源强大的工具,专为网页开发者设计,旨在帮助开发者在独立环境中创建、测试和管理组件。它提供了一个无依赖的环境,使开发者能够专注于单一组件的设计和行为验证,从而提升设计和开发效率,增强团队协作。其核心功能包括组件隔离、故事展示、自动化构建与测试以及团队协作。

优势:

  • 提高设计与开发效率:通过可视化组件在不同状态下的表现,助力开发者与设计师快速反馈与调整设计。
  • 加强团队协作:所有组件与故事集中于一个易于访问的平台,促进团队成员间的沟通与共享理解。
  • 促进代码复用:独立的组件与测试提高了代码的复用性,减少重复劳动。
安装与配置

安装 Node.js与 yarn

确保计算机上已安装最新版本的 Node.js,访问 Node.js 官方网站 下载并安装。使用 yarn 作为包管理器,运行以下命令进行安装:

npm install -g yarn

安装 storybook

全局安装 storybook:

yarn global add @storybook/cli

初始化新项目:

yarn add @storybook/react @storybook/addon-actions @storybook/addon-links
npx storybook init

.storybook 目录创建 main.js,配置故事book:

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

// 配置故事book
const loadStories = () => {
  require('../src/stories/index.js');
};

configure(loadStories, module);
组件创建与管理

创建组件

src 目录下创建组件文件,如 Button.js

import React from 'react';

const Button = ({ onClick, label }) => {
  return (
    <button onClick={onClick}>
      {label}
    </button>
  );
};

export default Button;

创建故事

.storybook 目录下创建 index.js,导入并配置组件的故事:

import { module, story } from '@storybook/addon-docs/blocks';

import Button from '../src/components/Button';

module('Button');

story('Primary', () => (
  <Button onClick={() => console.log('Clicked')} label="Click me" />
));

story('Disabled', () => (
  <Button onClick={() => console.log('Clicked')} label="Click me" disabled />
));
故事编写与测试

编写故事展示组件在不同状态下的行为。在 index.js 文件中,定义 Button 的故事:

const stories = {
  'Primary': () => (
    <Button onClick={() => console.log('Clicked')} label="Click me" />
  ),
  'Disabled': () => (
    <Button onClick={() => console.log('Clicked')} label="Click me" disabled />
  ),
};

module.exports = stories;
集成与优化

自动化构建与测试

配置 .storybook/main.js 以启用自动化测试:

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

const loadStories = () => {
  require('../src/stories/index.js');
};

const previewConfig = {
  parameters: {
    actions: { argTypesRegex: '^on[A-Z].*' },
    controls: {
      matchers: {
        color: /(background|color)$/i,
        date: /Date$/,
      },
    },
  },
};

configure(loadStories, module);

代码示例:构建复杂数字表单组件

构建一个复杂数字表单组件,包括输入验证、条件显示和错误处理。使用 React 的 useStateuseEffect Hook:

import React, { useState, useEffect } from 'react';
import { TextField, Button, Typography } from '@material-ui/core';

const validateInput = (inputValue, required = true) => {
  if (required && !inputValue) {
    return '请输入数字';
  }
  if (inputValue.length > 10) {
    return '数字最多为10位';
  }
  return '';
};

const NumberInputForm = () => {
  const [inputValue, setInputValue] = useState('');
  const [error, setError] = useState('');

  useEffect(() => {
    const currentError = validateInput(inputValue);
    setError(currentError);
  }, [inputValue]);

  const handleInputChange = (event) => {
    setInputValue(event.target.value);
  };

  return (
    <div>
      <Typography variant="h6">数字输入表单</Typography>
      <TextField
        label="输入数字"
        value={inputValue}
        onChange={handleInputChange}
        error={!!error}
        helperText={error}
      />
      <Button variant="contained" color="primary" disabled={error}>
        提交
      </Button>
    </div>
  );
};

export default NumberInputForm;

通过遵循上述指南和最佳实践,您可以有效地使用 storybook 来提升组件开发的效率和质量,确保设计的一致性和增强团队协作。不断实践和探索故事book的潜力,将发现更多有价值的使用场景和创新方法。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消