记前端状态管理库Akita中的一个坑

记状态管理库Akita中的一个坑

Akita是什么

Akita是一种基于RxJS的状态管理模式,它采用Flux中的多个数据存储和Redux中的不可变动新的思想,以及流数据的概念,来建立可观察的数据存储模型。 不管是Angular、React、Vue、Web组件,仍是普通的旧式JS,秋田均可以完成繁重的工做,并做为维护干净、无样板、可伸缩的应用程序的有用工具。html

Akita基于面向对象的设计原则,而不是函数式编程,所以具备OOP经验的开发人员应该感到很熟悉。它您的团队提供了一个不可偏离的固定模式。编程

注意一个坑

在建立Entity Store时根据需求您可能须要在@StoreConfig()装饰器中配置Entity Store 的id属性函数式编程

直接上代码函数

一段ts代码工具

import { Todo } from './todo.model'; import { EntityState, EntityStore, StoreConfig } from '@datorama/akita'; ​ export interface TodosState extends EntityState<Todo> { } ​ // fixme 注意这里 @StoreConfig({ name: 'todos' }) export class TodosStore extends EntityStore<TodosState, Todo> { constructor() { super(); } }

 

这是一段官方的demo,可是其中有个坑。 若您Entity Store中的实体类型中惟一标识不为id,则须要本身手动设置 Akita @StoreConfig 会默认绑定您实体类型中的id属性做为惟一标识,若 不绑定惟一标识且@StoreConfig又找不到id属性则EntityStore在调用 set存储数据时会出错(可是不会报错。。。。。天坑,不知道时有意为之仍是bug)spa

若惟一标识Entity Id不为id则写为下面这种形式设计

一段ts代码:code

import { Todo } from './todo.model'; import { EntityState, EntityStore, StoreConfig } from '@datorama/akita'; export interface TodosState extends EntityState<Todo> { } // fixme 注意这里,修改后为 @StoreConfig({ name: 'todos',idKey: yourId }) export class TodosStore extends EntityStore<TodosState, Todo> { constructor() { super(); } }

 

吐槽一下: 还有就是官网在文档关于这个须要特别注意 事项这个惟一标识绑定的介绍是在建立Entity Store以后的...(坑死欧啦)htm

原文出处:https://www.cnblogs.com/siegaii/p/11071982.html对象

相关文章
相关标签/搜索