TinyBase 查询功能入门指南
什么是 TinyBase 查询
TinyBase 是一个轻量级的状态管理库,其查询模块提供了强大的数据查询能力。通过查询功能,开发者可以针对 Store 中的 Tables 执行复杂的数据操作,包括:
- 筛选特定的行(Row)和单元格(Cell)
- 执行数据分组(grouping)
- 进行聚合计算(aggregation)
- 创建数据视图
核心概念解析
1. 创建查询对象
查询功能的核心入口是 createQueries
函数,它会返回一个 Queries
对象。这个对象提供了以下能力:
- 定义新的查询
- 直接访问查询结果
- 注册结果变更监听器
import {createQueries, createStore} from 'tinybase';
const store = createStore().setTable('pets', {
fido: {species: 'dog', color: 'brown'},
felix: {species: 'cat', color: 'black'},
cujo: {species: 'dog', color: 'black'},
});
const queries = createQueries(store);
2. 定义查询
查询定义使用 setQueryDefinition
方法,它接收三个参数:
- 查询名称
- 要查询的表名
- 定义查询逻辑的函数
queries.setQueryDefinition('dogColors', 'pets', ({select, where}) => {
select('color');
where('species', 'dog');
});
在这个例子中,我们:
- 使用
select
指定要返回的列 - 使用
where
添加筛选条件
3. 获取查询结果
查询结果可以通过多种方法获取,这些方法与 Store 的获取方法对应,但前缀为"Result":
console.log(queries.getResultTable('dogColors'));
// 输出: {fido: {color: 'brown'}, cujo: {color: 'black'}}
常用结果获取方法包括:
getResultTable
- 获取整个结果表getResultRowIds
- 获取结果行IDgetResultRow
- 获取单行数据getResultCell
- 获取单个单元格值
响应式特性
TinyBase 查询具有响应式特性,当底层数据变化时,查询结果会自动更新。我们可以添加监听器来响应这些变化:
const listenerId = queries.addResultTableListener('dogColors', () => {
console.log(queries.getResultTable('dogColors'));
});
store.setCell('pets', 'cujo', 'species', 'wolf');
// 监听器会输出: {fido: {color: 'brown'}}
监听器方法与 Store 的监听方法类似,前缀为"Result":
addResultTableListener
addResultRowListener
addResultCellListener
等
查询与其他模块的关系
TinyBase 还提供了其他专门的数据处理模块:
Metrics
- 用于计算和跟踪指标Indexes
- 用于创建索引Relationships
- 用于建立行间关系
相比这些专用模块,Queries
提供了更通用但更强大的查询能力,适合需要复杂数据操作的场景。
实际应用场景
- 数据筛选:从大量数据中提取符合条件的子集
- 数据转换:创建特定格式的数据视图
- 实时仪表盘:结合监听器实现数据变化时的自动更新
- 数据预处理:为UI组件准备所需格式的数据
最佳实践
- 合理命名查询:使用有意义的查询名称便于维护
- 复用查询对象:一个Store对应一个Queries对象
- 及时清理监听器:避免内存泄漏
- 组合简单查询:复杂查询可以拆分为多个简单查询
通过掌握 TinyBase 的查询功能,开发者可以高效地处理应用状态数据,构建响应式且高性能的应用程序。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考