故事书代码预览不显示 VueJS 中插槽的使用情况

Posted

技术标签:

【中文标题】故事书代码预览不显示 VueJS 中插槽的使用情况【英文标题】:storybook code preview doesn't show the usage of slots in VueJS 【发布时间】:2021-06-27 20:37:21 【问题描述】:

我正在使用 Storybook 创建有关我在项目中使用的组件的文档。其中一个组件使用了 VueJS 中称为 Slots 的功能。在下面的 sn-p 中,您可以看到使用插槽的故事。

export const IconText = (args,  argTypes ) => (
  props: Object.keys(argTypes),
  components:  Button, IconAdd ,
  template: `
  <Button>
    <template v-slot:text>
      Text
    </template>

    <template v-slot:icon>
      <IconAdd />
    </template>
  </Button>
  `
)

问题是,如果我在Storybook中触摸查看这个Story的代码预览,我只是看到下面的sn-p,我想看看slots的使用情况,你知道我该如何实现?

<template><Button /></template>

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,这是我为使其正常工作所做的。

我知道这不是最漂亮的方法,但这是我找到的唯一方法。

因此,您必须在故事的参数中说明要手动显示的代码,如下所示:

yourStory.parameters = 
  docs: 
    source: 
      code: 'Write code you want to be displayed here',
    ,
  ,
;

欲了解更多信息,请查看:https://storybook.js.org/docs/react/writing-docs/doc-blocks#docspage-1

【讨论】:

【参考方案2】:

您可以使用Doc Blocks 并通过调用Source 插件编写自己的自动生成代码sn-p。

示例¹:

import  Source  from '@storybook/addon-docs/blocks'
import dedent from 'ts-dedent'
<Source
  language="jsx"
  code=dedent`
    <Button variant="rectangle" />
  `
/>

¹https://levelup.gitconnected.com/documenting-design-systems-with-storybook-docs-e54b2fa5203

【讨论】:

【参考方案3】:

我通过从 $props 变量中删除插槽并简单地将其传递到带有 args.default 的模板(default 是插槽名称)解决了这个问题

export default 
    title: 'Button',
    component: ECBtn,
    parameters,
    argTypes: 
        default: 
            description: "The default Vue slot",
            control: 
                type: 'text',
            ,
            table: 
                category: 'Slots',
                type: 
                    summary: 'html',
                ,
            
        
    

;

const Template = (args,  argTypes ) => (
  props: Object.keys(argTypes),
  components:  
    'ec-btn': ECBtn,
  ,
  template:`
    <ec-btn v-bind="propsWithoutSlot">
      $args.default
    </ec-btn>
  `,
  computed: 
    propsWithoutSlot() 
        const all = this.$props;
        delete all.default
        return all;
    

);

这就是源代码的样子。摆脱 &lt;template&gt; 标记会很好,但至少插槽显示正确!

编辑:我也找到了删除&lt;template&gt; 标签的方法。在preview.js 文件中,您需要可以使用transformSource() 删除模板标签以及您想要在源sn-p 中更改的任何其他内容。删除模板标签后,我使用beautify-js 格式化html缩进。

// preview.js


var beautify_html = require('js-beautify').html;

export const parameters = 
  docs: 
    transformSource: (src) => 
      const string1 = src.substr(0, src.length - 12).substr(10)

      return beautify_html(string1)
    
  

【讨论】:

以上是关于故事书代码预览不显示 VueJS 中插槽的使用情况的主要内容,如果未能解决你的问题,请参考以下文章

在故事书预览中定义一个功能组件

无法覆盖故事书预览面板?

记录uni-app开发微信小程序踩过得坑,包括iconfont不显示v-if插槽上不生效pdf在线预览等

VueJS 插槽:为啥通过父插槽传入的子方法不起作用?

VueJS - 将插槽和作用域插槽向下传递给子模板中的组件

如何在故事书中显示 material-ui 主题对象