連結

將 Story 連結在一起,以使用您的 UI 元件建立展示和原型

在 Github 上檢視

Story 連結擴充功能

Storybook 連結擴充功能可用於建立在 Storybook 中故事之間導航的連結。

框架支援

開始使用

透過新增 @storybook/addon-links 依賴項來安裝此擴充功能

yarn add -D @storybook/addon-links

.storybook/main.js

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

然後您可以在您的 stories 中導入 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 中的任何故事。

  • 第一個參數是 story kind 名稱(您使用 title 命名的名稱)。
  • 第二個(可選)參數是 story 名稱(您使用 exported name 命名的名稱)。如果省略第二個參數,連結將指向給定 kind 中的第一個故事。

您也可以為上述任何參數傳遞函式。該函式接受由事件發出的參數,並且應返回一個字串

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 函式

如果您想要取得特定 story 的 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 裝飾器啟用了一種使用資料屬性定義 story 連結的宣告式方法。以下是 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 元素的元件,但會防止在普通的滑鼠左鍵點擊時重新載入頁面,以便仍然可以使用預設的瀏覽器方法在新分頁中開啟連結。可以從 @storybook/addon-links 套件導入此類元件的 React 實作

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,將會保留目前的 kind。

<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
標籤