v0.11 Query、Queryable 与 useQuery
· 阅读需 12 分钟
除了规范化状态带来的性能和数据完整性收益之外,我们还获得了一项额外的好处:能够安全地直接访问并查询 store。
在本次发布中,我们围绕 Queryable Schema 的概念统一并简化了这一功能。它们包括 Entity、All、Collection、Query 和 Union
这一变化最大的影响是引入了新的 hook useQuery(),它允许使用 Queryable Schema 直接查找 store。
class User extends Entity {
username = '';
id = '';
groupId = '';
pk() {
return this.id;
}
static index = ['username' as const];
}
const bob = useQuery(User, { username: 'bob' });
const bob = useQuery(User, { id: '5' });
同样地,我们可以通过 controller.get 在 controller 和 snapshot 中查找 Queryable
const bob = snapshot.get(User, { username: 'bob' });
此外,我们还投入了更多的性能改进,使大多数操作的性能提升了约 2 倍,而 Query 则快了 16 倍。
破坏性变更:
- useCache(new Index(MyEntity)) -> useQuery(MyEntity)
- new Query -> new schema.Query
- useCache(myQuery) -> useQuery(myQuery)
- new AbortOptimistic() -> snapshot.abort
- Entity.useIncoming → Entity.shouldUpdate
- useCache() 接受带有 sideEffects 的 Endpoint(例如 Resource.update)
- 允许 Entity.pk() 返回数字。
- 2 到 16 倍的性能改进
