我有以下用于聊天应用程序的模型,使用redux-orm
. 每个Conversation
包含许多Messages
,但一条消息只能属于一个Conversation
:
export class Message extends Model {
static modelName = 'Message';
static fields = {
id: attr(),
text: attr(),
created: attr(),
from: fk('User'),
conversation: fk('Conversation', 'messages')
};
}
export class Conversation extends Model {
static modelName = 'Conversation';
static fields = {
id: attr(),
created: attr(),
};
}
我正在使用以下选择器来获取包含各自消息的对话列表。
export const getConversations = createSelector(
getOrm,
createOrmSelector(orm, session => {
return session.Conversation
.all()
.toModelArray()
})
);
问题?messages
每个Conversation
实例的属性是 a QuerySet
,而不是 a Array
,这使得传递 ti 组件时很难处理。
这是我尝试过的解决方案:
messages
将每个模型的属性映射到withConversation
的数组。即使我尝试克隆对象,这也给了我错误。Messages
messages.all().toModelArray()
Can't mutate a reverse many-to-one relation
创建一个全新的普通旧 JavaScript 对象并复制所有属性,然后为
messages
. 这行得通,但是创建所有这些新对象对于状态频繁更改的应用程序来说似乎是一个巨大的性能消耗。
我应该如何在这里实现我的目标?