dataMixedManager
package version >0.3.0
shadcn any version
author: cmtlyt
update time: 2026/04/01 16:07:21
dataMixedManager 是一个强大的数据混合管理器,支持定坑逻辑、数据混合、事件系统和插卡模式。适用于需要在列表中插入固定位置数据的场景,如广告插入、分隔符、特殊标记等。
特性
- 定坑逻辑:支持在指定位置插入固定数据
- 数据混合:自动混合定坑数据和普通数据
- 事件系统:提供完整的事件监听和分发机制
- 插卡模式:支持在指定位置插入数据(before/after/cover)
- 批量更新:支持批量操作,减少事件触发次数
- 增量构建:智能增量更新,提升性能
- 类型安全:完整的 TypeScript 类型支持
install
npm
shadcn
usage
基础用法
创建管理器实例
添加定坑配置
批量添加定坑配置
删除定坑配置
清除所有定坑配置
高级用法
事件监听
移除事件监听
插卡模式
批量插卡
重建模式
清空数据列表
使用场景
广告插入
列表分隔符
分页加载
动态广告插入
API
dataMixedManager(options?)
创建数据混合管理器实例。
参数
- options?:
DataMixedManagerOptions<T>- name?:
string- 管理器名称,默认为
'default'
- 管理器名称,默认为
- fixedSlots?:
InputSlotConfig<T>[]- 初始定坑配置数组
- dataList?:
T[]- 初始数据列表
- listener?:
Partial<EventDetailMap<T>>- 事件监听器对象
- name?:
返回值
- 返回值:
DataMixedManager<T>
DataMixedManager 实例方法
addFixedSlot(config, buildOptions?)
添加单个定坑配置。
参数
- config:
InputSlotConfig<T>- position:
number- 定坑位置
- data:
T- 定坑数据
- type?:
'fixed' | 'insert'- 类型,默认为
'fixed'
- 类型,默认为
- insertMode?:
'cover' | 'before' | 'after'- 插入模式,默认为
'cover'
- 插入模式,默认为
- position:
- buildOptions?:
BuildOptions- lazy?:
boolean- 是否延迟构建,默认为
false
- 是否延迟构建,默认为
- mode?:
'patch' | 'rebuild'- 构建模式,默认为
'patch'
- 构建模式,默认为
- lazy?:
返回值
- 返回值:
number- 添加后的定坑位置
addFixedSlots(configs, buildOptions?)
批量添加定坑配置。
参数
- configs:
InputSlotConfig<T>[]- 定坑配置数组
- buildOptions?:
BuildOptions- 构建选项
返回值
- 返回值:
number[]- 添加后的定坑位置数组
deleteFixedSlot(position, buildOptions?)
删除指定位置的定坑配置。
参数
- position:
number- 要删除的定坑位置
- buildOptions?:
BuildOptions- 构建选项
deleteFixedSlots(positions, buildOptions?)
批量删除定坑配置。
参数
- positions:
number[]- 要删除的定坑位置数组
- buildOptions?:
BuildOptions- 构建选项
clearFixedSlots(buildOptions?)
清除所有定坑配置。
参数
- buildOptions?:
BuildOptions- 构建选项
appendList(list, buildOptions?)
追加新的数据列表到普通数据列表末尾。
参数
- list:
T[]- 要追加的数据数组
- buildOptions?:
BuildOptions- 构建选项
clearList()
清空普通数据列表。
getMixedData(buildOptions?)
获取混合后的数据。
参数
- buildOptions?:
Omit<BuildOptions, 'lazy'>- mode?:
'patch' | 'rebuild'- 构建模式,默认为
'patch'
- 构建模式,默认为
- mode?:
返回值
- 返回值:
MixedDataItem<T>[]- 混合后的数据项数组
insertSlot(config)
插入数据(插卡模式)。
参数
- config:
PickRequired<InputSlotConfig<T>, 'insertMode'>- position:
number- 插入位置
- data:
T- 插入数据
- insertMode:
'cover' | 'before' | 'after'- 插入模式
- position:
返回值
- 返回值:
number- 插入后的实际位置
insertSlots(configs)
批量插入数据。
参数
- configs:
PickRequired<InputSlotConfig<T>, 'insertMode'>[]- 插入配置数组
返回值
- 返回值:
number[]- 插入后的实际位置数组
addEventListener(type, listener, options?)
添加事件监听器。
参数
- type:
'change' | 'clear'- 事件类型
- listener:
DMMEventHandler<T, E> | null- 事件监听器函数
- options?:
AddEventListenerOptions | boolean- 事件监听选项
removeEventListener(type, listener, options?)
移除事件监听器。
参数
- type:
'change' | 'clear'- 事件类型
- listener:
DMMEventHandler<T, E> | null- 事件监听器函数
- options?:
EventListenerOptions | boolean- 事件监听选项
最佳实践
1. 合理使用批量操作
2. 使用事件监听响应数据变化
3. 合理使用重建模式
4. 及时清理资源
注意事项
- 定坑位置基于混合结果:定坑位置是相对于混合后的数据列表,不是原始数据列表
- 操作顺序很重要:应该先添加定坑配置(
addFixedSlots),再添加数据(appendList),因为appendList默认会触发数据混合。如果先添加数据后添加定坑配置,定坑数据不会立即混合到已有数据中,需要使用rebuild模式 - 插卡模式触发重建:使用插卡模式会触发全量重建,可能影响性能
- 事件监听清理:组件卸载时记得移除事件监听器
- 批量操作性能:批量操作比多次单独操作性能更好
- 类型安全:确保定坑数据和普通数据的类型兼容
- 位置冲突:多个定坑配置不建议使用相同的位置
- 数据引用:混合后的数据是新的数组,不会影响原始数据