Skip to content

A 组件设计文档 ​

概述 ​

a 组件是本组件库中用于创建超链接的基础组件。它延续了我们组件库一贯的设计理念,采用"关注点分离"和"逻辑抽象"的原则,通过 useClassComputed 和 useStyleComputed 两个核心 Hooks 实现了简洁而强大的链接样式控制功能。

a 组件专注于处理链接的展示样式,包括类型、尺寸、颜色、下划线等常用属性,为用户提供了一套完整且易用的链接展示解决方案。

设计理念 ​

分层架构 ​

a 组件严格按照三层架构设计:

  1. 结构层 (a.vue) - 负责组件的 DOM 结构和基本布局
  2. 逻辑层 (computedA.ts) - 通过 Hooks 处理复杂的响应式计算
  3. 表现层 (a.scss) - 定义组件的视觉呈现和样式规则

逻辑抽象 ​

a 组件将复杂的样式逻辑抽象为两个核心 Hooks:

· useClassComputed - 处理动态类名生成
· useStyleComputed - 处理动态样式生成

这种设计使得组件本身只需要声明所需逻辑,而具体的计算由 Hooks 完成。

核心功能设计 ​

Props 结构化设计 ​

a 组件的 props 按照功能划分为多个逻辑组:

typescript
// 外观相关属性
const appearanceProps = {
    type: {
        type: String as PropType<'primary' | 'success' | 'warning' | 'danger' | 'info' | 'text'>,
        default: ''
    },
    color: {
        type: String,
        default: ''
    }
};

// 行为相关属性
const behaviorProps = {
    disabled: {
        type: Boolean,
        default: false
    },
    underline: {
        type: Boolean,
        default: false
    }
};

// 布局相关属性
const layoutProps = {
    size: {
        type: [String, Number] as PropType<string | number>,
        default: undefined
    },
    tag: {
        type: String,
        default: 'a'
    }
};

这种分组方式使得代码结构更加清晰,也方便后续的功能扩展。

useClassComputed 的应用 ​

a 组件利用 useClassComputed Hook 来处理动态类名的生成:

typescript
const aClass = useClassComputed<AProps>({
    baseClass: 'my-a',
    propClasses: {
        type: props.type,
        size: props.size && ['large', 'medium', 'small', 'mini'].includes(String(props.size)) ? String(props.size) : undefined,
    },
    flagClasses: {
        disabled: props.disabled,
        underline: props.underline
    }
});

这种设计确保了类名生成的一致性和可维护性。

useStyleComputed 的应用 ​

a 组件使用 useStyleComputed Hook 来处理动态样式生成:

typescript
const aStyle = useStyleComputed<AProps>(props, {
    propToStyleMap: {
        color: 'color',
        size: 'fontSize',
    },
    fontSizeProp: 'size',
})

这种设计允许组件同时支持预设尺寸和自定义尺寸值。

样式系统设计 ​

BEM 命名规范 ​

a 组件采用 BEM 命名规范,确保类名语义清晰: · 基础类名:.my-a · 修饰符类名:.my-a--primary, .my-a--medium, .my-a--disabled

链接样式控制 ​

a 组件支持多种链接样式控制:

  1. 链接类型:primary、success、warning、danger、info、text
  2. 链接尺寸:large、medium、small、mini 或自定义数值
  3. 链接颜色:通过 color 属性自定义颜色
  4. 禁用状态:通过 disabled 属性控制
  5. 下划线控制:通过 underline 属性控制下划线显示

响应式设计 ​

a 组件支持响应式链接尺寸设置,既可以使用预设尺寸,也可以指定具体数值。

扩展性设计 ​

a 组件具备良好的扩展性:

  1. 自定义标签支持:可通过 tag prop 渲染为不同 HTML 元素
  2. 全面样式控制:支持类型、尺寸、颜色等完整样式设置
  3. 灵活的尺寸控制:支持预设尺寸和自定义数值
  4. 主题适配:通过 CSS 变量支持主题定制
  5. 行为控制:支持禁用状态和下划线控制

样式细节 ​

a 组件在样式处理上有以下特点:

  1. 默认样式:无下划线,鼠标悬停时显示下划线
  2. 类型样式:不同类型的链接有不同的颜色主题
  3. 禁用状态:禁用时降低透明度并移除悬停效果
  4. 尺寸控制:支持四种预设尺寸和自定义尺寸

性能优化 ​

通过以下方式优化性能:

  1. 使用 computed 属性缓存计算结果
  2. 将复杂逻辑移至独立的 hooks 中
  3. 避免不必要的重新渲染
  4. 使用 Vue 3 Composition API 提高运行效率

设计价值 ​

a 组件延续了我们组件库的设计哲学:

  1. 关注点分离:结构、样式、逻辑完全解耦
  2. 高度复用:通过 hooks 抽象通用逻辑
  3. 易于维护:清晰的代码结构和命名规范
  4. 可扩展性强:支持丰富的定制选项
  5. 一致性:与 Button、Border、Text 等其他组件保持一致的设计语言

基于 MIT 协议