SwiftUI:避免在主数据更改时重新创建详细视图

时间:2020-02-03 12:09:12

标签: swift swiftui

我在聊天应用程序的常见场景中,会话列表由数据源驱动。

struct ConversationsView: View {
    @ObservedObject var dataSource: ConversationsDataSource

    ...

    var body: some View {
        NavigationView {
            List {
                ForEach(dataSource.items) { item in
                    NavigationLink(destination: ChatView(conversationId: item.identifier)) {
                        Text(item.identifier)
                    }
                }
            }
        }
    }
}

我可以点击一个单元格,然后输入ChatView,大致如下所示:

struct ChatView: View {
    @ObservedObject var dataSource: ChatDataSource

    ...

    var body: some View {
        List {
            ForEach(dataSource.messages) { message in
                MessageView(message: message)
            }
        }
    }
}

当我进入ChatView并发送消息时,ConversationsDataSource会更新。因此,将重新加载ConversationsView的{​​{1}}并重新创建body,我认为这对性能没有好处。而且由于这个原因,我在插入消息时没有任何动画。

是否可以避免在ChatView更改时重新创建NavigationLink的目标视图?

在视图不可见时不重新加载ConversationsDataSource的{​​{1}}并不是解决方案,因为在iPad的拆分视图中,对话列表和当前聊天同时打开。

0 个答案:

没有答案