语境
我是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(商店中每个聊天的本地状态)。
- lastMessageId和draftMessageId也是每个聊天的本地状态。
问题
我也想保存一个减少聊天 ID 的列表。每个聊天都可以减少,以便在屏幕上最小化(也可以扩展)。所以这也是本地聊天状态。
我想检索减少的聊天列表,那么效率会更高吗?(我被迫使用Akita v4,所以我不能filterBy
使用selectAll
)
- 存储一个新的 ChatUI 本地属性并创建一个查询来过滤与该属性的聊天
- 使用一组 id ( ) 存储 ChatState ui 全局属性,
Set<string>
然后访问存储以查找这些对象。- 医生说:
在 store 中只存储普通对象,避免存储 Map 或 Set
- 创建一个新商店以保存/删除减少的聊天。
- 我不喜欢这样,我认为重复数据是一种反模式
谢谢大家