返回至Storybook 简介
章节
  • 开始使用
  • 简单组件
  • 复合组件
  • 数据
  • 页面
  • 部署
  • 可视化测试
  • 插件
  • 结论
  • 贡献

插件

了解如何集成和使用流行的 Controls 插件

Storybook 拥有强大的插件生态系统,你可以使用它们来增强团队中每个开发人员的开发体验。在此处查看所有插件

如果你一直在关注本教程,你已经遇到过多个插件,并在“测试”章节 中设置了一个。

针对各种可能的用例都有插件,要写完所有插件需要很长时间。让我们集成最受欢迎的插件之一:Controls

什么是 Controls?

Controls 允许设计师和开发人员通过“摆弄”组件的参数来轻松探索组件行为。无需代码。Controls 在你的 Storybook 旁边创建一个插件面板,因此你可以实时编辑它们的参数。

Storybook 的全新安装包默认包含 Controls。无需额外配置。

插件解锁新的 Storybook 工作流程

Storybook 是一个出色的组件驱动开发环境。Controls 插件将 Storybook 发展成为一个交互式文档工具。

使用 Controls 查找边缘情况

借助 Controls,QA 工程师、UI 工程师或任何其他利益干系人都可以将组件推向极限!考虑以下示例,如果我们向 Task 组件添加一个 MASSIVE 字符串会发生什么?

Oh no! The far right content is cut-off!

这不对!看起来文本溢出了 Task 组件的边界。

Controls 使我们能够快速验证组件的不同输入(在本例中是一个长字符串),并减少了发现 UI 问题所需的工作量。

现在,让我们通过向 Task.svelte 添加样式来解决溢出问题

复制
src/components/Task.svelte
<div class="list-item {task.state}">
  <label
    for={`checked-${task.id}`}
    class="checkbox"
    aria-label={`archiveTask-${task.id}`}
  >
    <input
      type="checkbox"
      checked={isChecked}
      disabled
      name={`checked-${task.id}`}
      id={`archiveTask-${task.id}`}
    />
    <!-- svelte-ignore a11y-click-events-have-key-events -->
    <span
      class="checkbox-custom"
      role="button"
      on:click={ArchiveTask}
      tabindex="-1"
      aria-label={`archiveTask-${task.id}`}
    />
  </label>
  <label for={`title-${task.id}`} aria-label={task.title} class="title">
    <input
      type="text"
      value={task.title}
      readonly
      name="title"
      id={`title-${task.id}`}
      placeholder="Input title"
+     style="text-overflow: ellipsis;"
    />
  </label>
  {#if task.state !== 'TASK_ARCHIVED'}
    <button
      class="pin-button"
      on:click|preventDefault={PinTask}
      id={`pinTask-${task.id}`}
      aria-label={`pinTask-${task.id}`}
    >
      <span class="icon-star" />
    </button>
  {/if}
</div>

That's better.

问题已解决!现在,当文本到达 Task 区域的边界时,它会被截断,并使用漂亮的省略号。

添加新 Story 以避免回归

将来,我们可以通过 Controls 输入相同的字符串来手动重现此问题。但编写一个展示此边缘情况的 Story 会更容易。这扩大了我们的回归测试覆盖范围,并为团队的其他成员清楚地概述了组件的限制。

Task.stories.js 中为长文本情况添加一个新 Story

复制
src/components/Task.stories.js
const longTitleString = `This task's name is absurdly large. In fact, I think if I keep going I might end up with content overflow. What will happen? The star that represents a pinned task could have text overlapping. The text could cut-off abruptly when it reaches the star. I hope not!`;

export const LongTitle = {
  args: {
    task: {
      ...Default.args.task,
      title: longTitleString,
    },
  },
};

现在我们可以轻松地重现和处理这个边缘情况。

如果我们正在进行可视化测试,如果截断解决方案中断,我们也会得到通知。没有测试覆盖,模糊的边缘情况很容易被遗忘!

💡 Controls 是让非开发人员使用你的组件和 Story 的绝佳方式。它可以做的事情比我们在这里看到的要多得多;我们建议阅读官方文档以了解更多信息。但是,你可以通过插件以更多方式自定义 Storybook,使其适应你的工作流程。在“创建插件指南”中,我们将通过创建一个插件来教你如何做到这一点,该插件将帮助你增强开发工作流程。

合并更改

别忘了使用 git 合并你的更改!

这个免费指南对您有帮助吗?发推文以示赞赏并帮助其他开发人员找到它。
下一章
结论
将你所有的知识整合在一起,学习更多 Storybook 技巧
✍️ 在 GitHub 上编辑 – 欢迎 PR!
加入社区
6,721位开发者及更多
为何为何选择 Storybook组件驱动的 UI
开源软件
Storybook - Storybook 中文

特别感谢 Netlify CircleCI