Storybook在ShowCode中显示所有内容

我正在使用 Vue 3 + Storybook。一切正常,除了当我单击“显示代码”时,它只显示所有内容而不仅仅是模板..我做错了什么?

这是我的故事:

import Button from './Button.vue';

export default {
  title: 'Components/Button',
  component: Button
};

const Template = (args) => ({
  // Components used in your story `template` are defined in the `components` object
  components: { Button },
  // The story's `args` need to be mapped into the template through the `setup()` method
  setup() {
    return { args };
  },
  // And then the `args` are bound to your component with `v-bind="args"`
  template: '<my-button v-bind="args" />',
});

export const Primary = Template.bind({});
Primary.args = {
  primary: true,
  label: 'Button',
};

export const Secondary = Template.bind({});
Secondary.args = {
  label: 'Button',
};

export const Large = Template.bind({});
Large.args = {
  size: 'large',
  label: 'Button',
};

export const Small = Template.bind({});
Small.args = {
  size: 'small',
  label: 'Button',
};

回答

正如您从下面的屏幕截图中看到的那样,它确实有效,正如您在 Vue 2 中所期望的那样。

但是,我在使用 Vue 3 时得到的结果与您相同。


简单的答案

它尚未在 Vue 3 中实现。

正如您在Storybook 的 docs 附加组件的源代码中所见,Vue 3 框架有一个单独的实现。然而,Vue 3 实现缺少源代码装饰器,它生成源代码的渲染版本。

修补程序

如果您不想等到 Storybook 团队发布更新,您可以使用以下代码根据您的参数生成您自己的文档。请记住,这并不涵盖所有用例。

const stringifyArguments = (key, value) => {
    switch (typeof value) {
    case 'string':
        return `${key}="${value}"`;
    case 'boolean':
        return value ? key : '';
    default:
        return `:${key}="${value}"`;
    }
};

const generateSource = (templateSource, args) => {
    const stringifiedArguments = Object.keys(args)
    .map((key) => stringifyArguments(key, args[key]))
    .join(' ');

    return templateSource.replace('v-bind="args"', stringifiedArguments);
};

const template = '<my-button v-bind="args" />';

const Template = (args) => ({
    components: { MyButton },
    setup() {
    return { args };
    },
    template,
});

export const Primary = Template.bind({});
Primary.args = {
    primary: true,
    label: 'Button',
};

Primary.parameters = {
    docs: {
    source: { code: generateSource(template, Primary.args) },
    },
};

另一个临时解决方案是手动编写源代码,而不是自动生成它。

Primary.parameters = {
  docs: {
    source: { code: '<my-button primary label="Button" />' },
  },
};


以上是Storybook在ShowCode中显示所有内容的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>