如何在苗条的故事书中使用`slot`

时间:2020-08-19 16:56:48

标签: components svelte storybook

如何为带有插槽的以下组件添加一个精简的故事书故事。

纽扣
<button>
 <slot />
</button>

我可以用作哪个

<script>
  import Button from './Button.svelte';
</script>

<Button>Hello World</Button>

如何为其中包含插槽的此类组件创建故事?

2 个答案:

答案 0 :(得分:3)

根据官方故事书存储库中的example file

如果我们需要在Svelte环境中测试组件,例如 测试插槽行为,然后将组件包装成一个视图 仅仅为了故事,是实现这一目标的最简单方法。

因此,暂时遵循此建议可能最容易。

Stack.svelte

  <div class="flex-col">
      <slot><!-- optional fallback --></slot>
  </div>

StackView.svelte

<script lang="ts">
  import Stack from './Stack.svelte'

</script>

<Stack>
  <p>Slot 1</p>
  <p>Slot 2</p>
  <p>Slot 3</p>
</Stack>

stack.stories.js

import Stack from './StackView.svelte';

export default {
  title: 'Stack',
  component: Stack,
};


const Template = ({ ...args }) => ({
  Component: Stack,
  props: args,

});

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

也就是说,use svelte template syntax to write stories可能很快就会出现。我认为这样可以更优雅地解决问题。

答案 1 :(得分:0)

我使用 npx sb init 命令将故事书添加到我的 svelte 组件库中。下面的故事定义适用于我的 SuccessLabel 组件:

<!--SuccessLabel.svelte-->
<div>
 <slot />
</div>

<style>
 div {
    position: relative;
    color: white;
    background-color: #28a745;
    border-color: #28a745;
    margin-top: -3px;
    padding: 10px;
    border-radius: 5px;
    border-top-right-radius: 0px;
    border-top-left-radius: 0px;
    font-size: 12px;
  }
</style>


<!--SuccessLabel.stories.svelte-->
<script>
 import { Meta, Story } from "@storybook/addon-svelte-csf";
 import SuccessLabel from "../src/components/labels/SuccessLabel.svelte";
</script>

<Meta title="Labels/SuccessLabel" component={SuccessLabel} />

<Story name="Default">
 <SuccessLabel>This message should be shown</SuccessLabel>
</Story>