# List 列表组件 API 文档
本文档由 `DeepSeek` 生成并微调。
## 组件描述
列表组件用于展示可选择的项目列表,内置滚动条功能和选中项高亮效果。适用于菜单选择、内容导航、设置选项等场景。
---
## Props 属性说明
| 属性名       | 类型                 | 默认值 | 描述                            |
| ------------ | -------------------- | ------ | ------------------------------- |
| `list`       | `[string, string][]` | 必填   | 列表内容,[id, 显示文本] 的数组 |
| `selected`   | `string`             | 必填   | 当前选中的项 ID                 |
| `loc`        | `ElementLocator`     | 必填   | 列表的位置和尺寸                |
| `lineHeight` | `number`             | `18`   | 每行的高度                      |
| `font`       | `Font`               | -      | 列表项的字体样式                |
| `winskin`    | `ImageIds`           | -      | 使用 winskin 作为光标背景       |
| `color`      | `CanvasStyle`        | -      | 使用指定样式作为光标背景        |
| `border`     | `CanvasStyle`        | -      | 使用指定样式作为光标边框        |
| `alphaRange` | `[number, number]`   | -      | 选择图标的不透明度范围          |
---
## Events 事件说明
| 事件名            | 参数类型          | 触发时机               |
| ----------------- | ----------------- | ---------------------- |
| `update`          | `(key: string)`   | 当用户选中某一项时触发 |
| `update:selected` | `(value: string)` | v-model 双向绑定事件   |
---
## Slots 插槽说明
无插槽
---
## Exposed Methods 暴露方法
无暴露方法
---
## 使用示例
### 基础用法 - 简单列表
```tsx
import { defineComponent, ref } from 'vue';
import { List } from '@user/client-modules';
export const MyCom = defineComponent(() => {
    const selectedItem = ref('item1');
    // 列表数据:[id, 显示文本]
    const listData = [
        ['item1', '第一项'],
        ['item2', '第二项'],
        ['item3', '第三项'],
        ['item4', '第四项']
    ];
    const handleSelect = (key: string) => {
        console.log('选中项:', key);
        selectedItem.value = key;
    };
    return () => (
        
);
});
```
### 带样式的列表
```tsx
import { defineComponent, ref } from 'vue';
import { List } from '@user/client-modules';
export const StyledListCom = defineComponent(() => {
    const selected = ref('opt2');
    const options = [
        ['opt1', '开始游戏'],
        ['opt2', '游戏设置'],
        ['opt3', '帮助文档'],
        ['opt4', '关于我们']
    ];
    return () => (
);
});
```
### 使用皮肤图片的列表
```tsx
import { defineComponent, ref } from 'vue';
import { List } from '@user/client-modules';
export const SkinnedListCom = defineComponent(() => {
    const currentSelection = ref('cat');
    const animalList = [
        ['cat', '猫咪'],
        ['dog', '小狗'],
        ['bird', '小鸟'],
        ['fish', '小鱼']
    ];
    const handleUpdate = key => {
        const item = animalList.find(item => item[0] === key)?.[1];
        currentSelection.value = key;
        console.log('选择了:', item);
    };
    return () => (
);
});
```
### 长列表滚动示例
```tsx
import { defineComponent, ref } from 'vue';
import { List } from '@user/client-modules';
export const ScrollListCom = defineComponent(() => {
    const selected = ref('item5');
    // 创建长列表数据
    const longList = Array.from({ length: 20 }, (_, i) => [
        `item${i + 1}`,
        `列表项 ${i + 1}`
    ]);
    return () => (
);
});
```
---
## 注意事项
1. **数据格式**: `list` 属性需要 `[id, text]` 格式的二维数组
2. **选中状态**: `selected` 需要与列表项中的 id 匹配
3. **滚动支持**: 自动显示滚动条
4. **样式优先级**: 如果设置了 `winskin`,则 `color` 和 `border` 设置将失效