折叠面板

Accordion 是折叠面板组件,适用于展示多个内容区域。

defineComponent RenderableContent

示例

点击展开查看详情

导入

JavaScript
import { createAccordion } from 'vanilla-jui';

基础用法

使用 createAccordion(props) 创建 AccordionPanel 实例:

JavaScript
const accordion = createAccordion({ active: 'usage', data: [ { name: 'intro', title: 'Intro', content: 'Intro content' }, { name: 'profile', title: ({ index }) => `Panel ${index + 1}`, content: ({ item }) => `Panel name: ${item.name}`, }, ],});const container = document.querySelector('#demo');if (container) accordion.mount(container);

参数

createAccordion(props)

参数 类型 默认值 说明
data AccordionItem[] 见下表 初始非空面板配置列表
id string | null 自动生成 根节点 id;为空时自动生成
active number | string | Array | null 0 初始激活项
collapsible boolean false 允许关闭当前已激活项
multiple boolean false 允许同时展开多个面板
direction 'vertical' | 'horizontal' vertical 布局与展开动画方向
className object 见下表 覆盖组件结构类名
onChange Function | null null 用户切换面板后的回调

data

在 JUI 中,类型 RenderableContent 表示可以渲染的合法内容类型,包括 string | number | boolean | Node | Array | Function | null

字段 类型 说明
name string 可选;为空时自动生成。传入固定值时要求唯一
title string 面板标题
content RenderableContent 面板内容
cache boolean 函数型 content 是否缓存结果
ttl number 缓存有效时间,单位毫秒;0 表示不过期

onChange

onChange(index, name, headerRef, panelRef, accordion)

参数 说明
index 当前激活面板索引
name 当前激活面板名称
headerRef 当前激活面板头 DOM 引用
panelRef 当前激活面板内容 DOM 引用
accordion 当前实例

className

字段 默认值 说明
root j-accordion 根节点
header accordion-header 面板头
title header-title 标题区域
arrow header-arrow 箭头区域
panel accordion-panel 面板区域
content panel-content 内容区域

实例属性

属性 说明
props 归一化后的创建期配置
state.data 响应式面板数据,变更后由 keyed 列表更新
state.activeNames 当前展开的面板名称列表
state.loading 异步函数型 content 正在解析
element build() 后生成的稳定根节点
runtime builtmounteddestroyed 状态
current 当前主面板,包含 indexname

state

把运行时需要关注的数据放入响应式 state

字段 说明
activeNames 当前展开的面板名称列表
data 面板数据列表
loading 异步函数型 content 正在解析

基于状态更新视图,如:

JavaScript
// 增加数据项accordion.state.data.push({ name: 'faq', title: 'FAQ', content: 'FAQ content',});// 更新数据项const faq = accordion.state.data.find((item) => item.name === 'faq');if (faq) faq.title = 'FAQ updated';// 删除数据项accordion.state.data = accordion.state.data.filter( (item) => item.name !== 'faq');

实例方法

方法 说明
build() 创建 DOM、绑定事件并同步初始状态
mount(container) 构建并挂载到指定容器
unmount() 从当前容器移除根节点
activate(indexOrName) 激活、展开或折叠指定面板
setState(patch) 设置响应式状态字段
destroy() 销毁实例,移除已挂载 DOM 并释放资源

公共控制器方法还包括 own()use()on()off()emit(),语义见 定义组件

最后更新于 2026-09-22 17:30:33 UTC+8