fayeah / blogs

方法论、问题驱动、总结
6 stars 0 forks source link

【UI】Storybook101 #46

Open fayeah opened 3 years ago

fayeah commented 3 years ago

两年前开始听说storybook,当时看文档觉得很复杂,就没有深入地去研究、去了解,现在项目上有机会做这样的尝试,我个人就基于一个小组件进行了第一次尝试,弄好之后发现,哇塞,太好用了吧,怎么没有早早开始研究呢~~

Prerequisite

初衷

团队是一个有10人左右规模的团队,不算大团队,但是我们频繁地在自定义新的组件,而其他人做了什么,或者说我们代码目前有哪些组件,是否可以重用,新的业务需求有了UI的设计之后如何快速地沟通我们现有的组件,是否保持设计系统风格的统一。那Storybook是一个非常好的工具,可以做一个简单的试验。

什么是storybook

官方的解释:

Storybook is the most popular UI component development tool for React, Vue, and Angular. It helps you develop and design UI components outside your app in an isolated environment. 意思是什么呢,简单来说它是一个可运行在独立环境里面的UI组件开发工具。有以下几个特点:

从0到1搭建一个storybook

根据官方文档,设置已有项目的storybook是非常简单的一件事情:

image

会看到搭建好之后已经有了几个例子,非常典型的Button,会有不同的状态、描述、默认值、Congtrols和Actions等。

我自己也是挑选了一个简单的组件来测试,登陆页面的Input组件,该组件也会有不同的状态:

根据这三种状态进行了不同的尝试,如下图:point_down::

image

按照文档的学习,实际上是非常简单的过程,我来总结一下值得注意的地方:

EmailForSignIn.args = {
  label: 'Email',
};

*.stories.js的代码

export default {
  title: 'SignIn/Input Form',
  component: InputForSignIn,
  argTypes: { onChange: { action: 'value changed' } },
  parameters: { actions: { argTypesRegex: '^on.*' } },
};

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

export const EmailForSignIn = Template.bind({});

EmailForSignIn.args = {
  label: 'Email',
};

EmailForSignIn.storyName = 'Email Input';

export const PasswordForSignIn = Template.bind({});

PasswordForSignIn.args = {
  label: 'Password',
}

export const EmailError = Template.bind({});

EmailError.args = {
  label: 'Email',
  helperText: 'Email address'
};

EmailError.storyName = 'Email Error';

个人的一些思考

前端开发组件化是一个趋势,设计领域的设计系统也都是在以原子化的趋势变化,storybook也是为了是的系统的统一性而衍生出来的一个产品,这是一个无论对于开发或是设计师来说都是极佳的体验。大量的插件也帮助我们更好地描述我们的组件。我认为storybook必将更加广泛地应用到开发领域,占有一片占比比较大的天地,我虽然也只是做了一个小小的试验,也深刻地感受到了storybook强大的威力,将来我也会更加关注设计系统。不论开发还是设计师,最终都是为了产品,好的产品需要多方面的认知。

References: