mcpField
L
lit-best-practices

lit-best-practices

github.com/artmsilva开发20171 次安装9 周前更新
代码仓库

关于 lit-best-practices

lit-best-practices 是一套 Lit Web Components 开发指南,面向开发者及 AI 辅助编程与代码审查。规则涵盖组件结构、渲染、无障碍、性能和安全,并按优先级标注问题。

主要功能

  1. 01组件结构指南
  2. 02渲染与样式建议
  3. 03生命周期和事件规则
  4. 04无障碍与性能指导
  5. 05含安全规则的优先级划分

适用场景

  1. 01编写新的 Lit 组件
  2. 02审查无障碍与性能
  3. 03重构现有组件

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/artmsilva/lit-best-practices --skill lit-best-practices

安装后在 Claude Code 中输入/lit-best-practices确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

AGENTS.md
rules/
1-1-use-decorators.md
1-2-separate-state.md
1-3-reflect-sparingly.md
1-4-default-values.md
1-5-standard-decorators.md
2-1-pure-render.md
2-2-use-nothing.md
2-3-use-repeat.md
2-4-use-cache.md
2-5-derived-state.md
2-6-class-style-map.md
3-1-static-styles.md
3-2-host-styling.md
3-3-css-custom-properties.md
3-4-css-parts.md
4-1-composed-events.md
4-2-event-naming.md
4-3-cleanup-listeners.md
5-1-super-call-order.md
5-2-first-updated.md
5-3-will-update.md
5-4-update-complete.md
6-1-delegates-focus.md
6-2-aria-attributes.md
6-3-form-associated.md
6-4-element-internals.md
7-1-has-changed.md
7-2-batch-updates.md
7-3-lazy-loading.md

详细介绍

Lit Web Components 最佳实践

构建 Lit Web Components 的最佳实践,针对 AI 辅助代码生成和审查进行了优化。

适用场景

在以下情况下参考这些指南:

  • 编写新的 Lit Web Components
  • 实现响应式属性和状态
  • 审查代码中的性能或无障碍问题
  • 重构现有 Lit 组件
  • 优化渲染和更新周期

规则类别

类别规则重点
1. 组件结构4 条规则属性、状态、TypeScript
2. 渲染5 条规则模板、指令、派生状态
3. 样式4 条规则静态样式、主题、CSS parts
4. 事件3 条规则自定义事件、命名、清理
5. 生命周期4 条规则回调、时机、异步
6. 无障碍4 条规则ARIA、焦点、表单、ElementInternals
7. 性能4 条规则更新、缓存、延迟加载
8. 组合与数据3 条规则控制器、异步任务、上下文
9. 安全1 条规则不可信标记

优先级

优先级描述操作
CRITICAL重大正确性或无障碍问题立即修复
HIGH对可维护性/性能有显著影响在当前 PR 中处理
MEDIUM违反最佳实践修改相关代码时处理
LOW风格偏好、微优化重构时考虑

规则索引

1. 组件结构
  • rules/1-1-use-decorators.md - 使用 TypeScript 装饰器(HIGH)
  • rules/1-2-separate-state.md - 将公共属性与内部状态分开(HIGH)
  • rules/1-3-reflect-sparingly.md - 谨慎反射属性(MEDIUM)
  • rules/1-4-default-values.md - 始终提供默认值(HIGH)
  • rules/1-5-standard-decorators.md - 标准装饰器需要 accessor(HIGH)
2. 渲染
  • rules/2-1-pure-render.md - 保持 render() 纯粹(CRITICAL)
  • rules/2-2-use-nothing.md - 空内容使用 nothing(MEDIUM)
  • rules/2-3-use-repeat.md - 键控列表使用 repeat()(HIGH)
  • rules/2-4-use-cache.md - 条件子树使用 cache()(MEDIUM)
  • rules/2-5-derived-state.md - 在 willUpdate() 中计算派生状态(HIGH)
  • rules/2-6-class-style-map.md - 使用 classMap 和 styleMap(MEDIUM)
3. 样式
  • rules/3-1-static-styles.md - 始终使用静态样式(CRITICAL)
  • rules/3-2-host-styling.md - 正确设置宿主元素的样式(HIGH)
  • rules/3-3-css-custom-properties.md - 使用 CSS 自定义属性实现主题(MEDIUM)
  • rules/3-4-css-parts.md - 使用 CSS parts 进行深层样式设置(MEDIUM)
4. 事件
  • rules/4-1-composed-events.md - 分发组合事件(CRITICAL)
  • rules/4-2-event-naming.md - 事件命名约定(MEDIUM)
  • rules/4-3-cleanup-listeners.md - 清理事件监听器(HIGH)
5. 生命周期
  • rules/5-1-super-call-order.md - 正确安排 super() 调用顺序(CRITICAL)
  • rules/5-2-first-updated.md - DOM 操作使用 firstUpdated(HIGH)
  • rules/5-3-will-update.md - 派生状态使用 willUpdate(HIGH)
  • rules/5-4-update-complete.md - 使用 updateComplete 执行异步操作(MEDIUM)
6. 无障碍
  • rules/6-1-delegates-focus.md - 交互式组件使用 delegatesFocus(HIGH)
  • rules/6-2-aria-attributes.md - 自定义交互式组件使用 ARIA(CRITICAL)
  • rules/6-3-form-associated.md - 与表单关联的自定义元素(HIGH)
  • rules/6-4-element-internals.md - 通过 ElementInternals 提供语义信息(MEDIUM)
7. 性能
  • rules/7-1-has-changed.md - 复杂类型使用自定义 hasChanged(HIGH)
  • rules/7-2-batch-updates.md - 批量更新属性(MEDIUM)
  • rules/7-3-lazy-loading.md - 延迟加载较重的依赖项(HIGH)
  • rules/7-4-memoization.md - 对开销较大的计算进行记忆化(MEDIUM)
8. 组合与数据
  • rules/8-1-reactive-controllers.md - 将共享逻辑提取到响应式控制器中(高)
  • rules/8-2-async-task.md - 使用 Task 处理异步数据(高)
  • rules/8-3-context.md - 使用 @lit/context 代替属性层层传递(中)
9. 安全
  • rules/9-1-unsafe-html.md - 切勿将不可信数据传递给 unsafeHTML(严重)

快速参考

必要的导入
// Core
import { LitElement, html, css, nothing } from 'lit';
import { customElement, property, state, query } from 'lit/decorators.js';

// Common Directives
import { repeat } from 'lit/directives/repeat.js';
import { cache } from 'lit/directives/cache.js';
import { classMap } from 'lit/directives/class-map.js';
import { styleMap } from 'lit/directives/style-map.js';
import { until } from 'lit/directives/until.js';

// Official packages
import { Task } from '@lit/task';
import { createContext, provide, consume } from '@lit/context';
组件骨架
@customElement('my-component')
export class MyComponent extends LitElement {
  static styles = css`
    :host { display: block; }
    :host([hidden]) { display: none; }
  `;

  @property({ type: String }) value = '';
  @property({ type: Boolean, reflect: true }) disabled = false;
  @state() private _internal = '';

  render() {
    return html`<slot></slot>`;
  }
}

资源

评论

支持 Markdown