記前端狀態管理庫Akita中的一個坑

記狀態管理庫Akita中的一個坑

Akita是什么

Akita是一種基于RxJS的狀態管理模式,它采用Flux中的多個數據存儲和Redux中的不可變更新的思想,以及流數據的概念,來創建可觀察的數據存儲模型。 無論是Angular、React、Vue、Web組件,還是普通的舊式JS,秋田都可以完成繁重的工作,并作為維護干凈、無樣板、可伸縮的應用程序的有用工具。

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)

若唯一標識Entity Id不為id則寫為下面這種形式

一段ts代碼:

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之后的...(坑死歐啦)

posted @ 2019-06-23 10:24 siegaii 閱讀(...) 評論(...) 編輯 收藏
内蒙古快3开奖结果