链接

将故事链接在一起,以使用您的 UI 组件构建演示和原型

在 Github 上查看

Story Links 插件

Storybook Links 插件可用于创建在 Storybook 中导航故事之间的链接。

框架支持

入门

通过添加 @storybook/addon-links 依赖项来安装此插件

yarn add -D @storybook/addon-links

.storybook/main.js

export default {
  addons: ['@storybook/addon-links'],
};

然后你可以在你的故事中导入 linkTo 并像这样使用

import { linkTo } from '@storybook/addon-links';

export default {
  title: 'Button',
};

export const first = () => <button onClick={linkTo('Button', 'second')}>Go to "Second"</button>;
export const second = () => <button onClick={linkTo('Button', 'first')}>Go to "First"</button>;

看看 linkTo 函数

import { linkTo } from '@storybook/addon-links';

linkTo('Toggle', 'off');
linkTo(
  () => 'Toggle',
  () => 'off'
);
linkTo('Toggle'); // Links to the first story in the 'Toggle' kind

这样,您可以将组件中的事件链接到 Storybook 中的任何故事。

  • 第一个参数是故事种类名称(您使用 title 命名的)。
  • 第二个(可选)参数是故事名称(您使用 导出名称 命名的)。如果省略第二个参数,则链接将指向给定种类中的第一个故事。

您还可以为上述任何参数传递一个函数。该函数接受事件发出的参数,并且应该返回一个字符串

import { linkTo } from '@storybook/addon-links';
import LinkTo from '@storybook/addon-links/react';

export default {
  title: 'Select',
};

export const index = () => (
  <select value="Index" onChange={linkTo('Select', (e) => e.currentTarget.value)}>
    <option>index</option>
    <option>first</option>
    <option>second</option>
    <option>third</option>
  </select>
);
export const first = () => <LinkTo story="index">Go back</LinkTo>;
export const second = () => <LinkTo story="index">Go back</LinkTo>;
export const third = () => <LinkTo story="index">Go back</LinkTo>;

hrefTo 函数

如果要获取特定故事的 URL,可以使用 hrefTo 函数。它返回一个 promise,该 promise 解析为包含相对 URL 的字符串

import { action } from '@storybook/addon-actions';
import { hrefTo } from '@storybook/addon-links';

export default {
  title: 'Href',
};

export const log = () => {
  hrefTo('Href', 'log').then(action('URL of this story'));

  return <span>See action logger</span>;
};

withLinks 装饰器

withLinks 装饰器使用数据属性提供了一种声明式定义故事链接的方式。这是一个 React 中的示例,但它适用于任何框架

import { withLinks } from '@storybook/addon-links';

export default {
  title: 'Button',
  decorators: [withLinks],
};

export const first = () => (
  <button data-sb-kind="OtherKind" data-sb-story="otherStory">
    Go to "OtherStory"
  </button>
);

LinkTo 组件(仅限 React)

使用 hrefTo 的一种可能方法是创建一个使用原生 a 元素的组件,但防止在普通左键单击时页面重新加载,以便仍然可以使用默认浏览器方法在新标签页中打开链接。此类组件的 React 实现可以从 @storybook/addon-links 包中导入

import LinkTo from '@storybook/addon-links/react';

export default {
  title: 'Link',
};

export const first = () => <LinkTo story="second">Go to Second</LinkTo>;
export const second = () => <LinkTo story="first">Go to First</LinkTo>;

它接受 a 元素的所有 props,以及 storykind。如果省略了 kind prop,则将保留当前种类。

<LinkTo
  kind="Toggle"
  story="off"
  target="_blank"
  title="link to second story"
  style={{ color: '#1474f3' }}
>
  Go to Second
</LinkTo>

要为另一个框架实现此类组件,您需要为原生 a 元素上的 click 事件添加特殊处理。请参阅 RoutedLink 源代码 以供参考。

作者
  • kasperpeulen
    kasperpeulen
  • jreinhold
    jreinhold
支持
    Angular
    Ember
    HTML
    Mithril
    Preact
    Rax
    React
    Riot
    Svelte
    Vue
    Web Components
标签