0

语境

我是Akita的新手,但我已经实现了一个会话存储。

现在我必须将一堆聊天对象存储到一个商店中,我想到了这个结构:


export interface ChatsState extends EntityState<Chat, string> {
  ui: {
    selectedChatId: string; // yes, ids are strings
  };
}

export type ChatUI = {
  typingId: string;
  lastMessageId: string;
  draftMessageId: string;
}
export interface ChatsUIState extends EntityState<ChatUI> {}

@StoreConfig({ name: 'chats'})
export class ChatsStore extends EntityStore<ChatsState> {
  ui: EntityUIStore<ChatsUIState>;

  constructor() {
    super();
    this.createUIStore();
  }
}

在哪里:

  • selectedChatId是 UI 中显示的聊天窗口(全局状态)。
  • typingId是在聊天中输入的用户的 ID(商店中每个聊天的本地状态)。
  • lastMessageIddraftMessageId也是每个聊天的本地状态。

问题

我也想保存一个减少聊天 ID 的列表。每个聊天都可以减少,以便在屏幕上最小化(也可以扩展)。所以这也是本地聊天状态。

我想检索减少的聊天列表,那么效率会更高吗?(我被迫使用Akita v4,所以我不能filterBy使用selectAll

  1. 存储一个新的 ChatUI 本地属性并创建一个查询来过滤与该属性的聊天
  2. 使用一组 id ( ) 存储 ChatState ui 全局属性,Set<string>然后访问存储以查找这些对象。

    在 store 中只存储普通对象,避免存储 Map 或 Set

  3. 创建一个新商店以保存/删除减少的聊天。
    • 我不喜欢这样,我认为重复数据是一种反模式

谢谢大家

4

0 回答 0