You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Storybook 7.0+Lit 2.0:如何让Show Code显示组件属性?

解决Storybook 7.0 + Lit 2.0组件「Show Code」不显示属性的问题

问题出在你当前用的是Lit的属性绑定语法(.date=${args.date}这种带点的写法),而Storybook的「Show Code」默认识别的是标准HTML属性,没法解析Lit的属性绑定语法,所以只显示空的组件标签。

下面是两种可行的解决方法:

方法一:使用Storybook的argsToTemplate工具(推荐)

Storybook为Web Components提供了argsToTemplate工具,能自动把story的args转换成对应的组件属性/属性绑定,同时让「Show Code」正确展示所有属性。

修改后的代码如下:

import { html } from "lit";
import type { Meta, StoryObj } from "@storybook/web-components";
// 导入argsToTemplate工具
import { argsToTemplate } from "@storybook/web-components";
import { DateFormatterProps } from ".";
import ".";

const Template = (args: DateFormatterProps) => {
  return html`
    <date-formatter ${argsToTemplate(args)}></date-formatter>
  `;
}

const meta: Meta<DateFormatterProps> = {
  title: "Date Formatter",
  tags: ['autodocs'],
  render: Template,
  parameters: {
    docs: {
      description: {
        component: "",
      },
    },
  },
  argTypes: {
    date: { control: "date",  description: "要格式化的日期,可以是Date对象或能被Date构造函数解析的字符串" },
    showHoursAndMinutes: { control: "boolean", description: "是否显示小时和分钟" },
    showDateOnly: { control: "boolean", description: "是否仅显示日期" },
    digitOnlyFormat: { control: "boolean", description: "是否仅使用数字格式" },
    showSeconds: { control: "boolean", description: "是否显示秒数" },
  }
};
export default meta;

type Story = StoryObj;
export const Default: Story = {
  args: {
    date: new Date(),
    showHoursAndMinutes: true,
    showDateOnly: false,
    digitOnlyFormat: false,
    showSeconds: false,
  }
};

方法二:手动将属性绑定转为HTML属性(仅适用于支持属性反射的组件)

如果你的Lit组件已经配置了属性反射(比如用reflect: true在@property装饰器里),可以直接把属性绑定换成标准HTML属性写法:

const Template = (args: DateFormatterProps) => {
  return html`
    <date-formatter 
      date=${args.date.toISOString()}
      ?show-hours-and-minutes=${args.showHoursAndMinutes}
      ?show-date-only=${args.showDateOnly}
      ?digit-only-format=${args.digitOnlyFormat}
      ?show-seconds=${args.showSeconds}
      ></date-formatter>
  `;
}

这种方法需要注意:布尔属性要用?前缀,日期这类复杂类型需要转成字符串格式(比如ISO字符串),而且组件必须支持对应的HTML属性反射。

内容的提问来源于stack exchange,提问作者Tyler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:42:37