Я нахожусь в обычном сценарии приложения чата, где список разговоров определяется источником данных.
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
s body
перезагружается, а ChatView
воссоздается, что я не считаю хорошим для производительности. Также я не получаю никакой анимации при вставке сообщения из-за этого.
Можно ли избежать воссоздания целевого представления NavigationLink при изменении ConversationsDataSource
?
Не перезагружать ConversationsView
body
когда вид не виден, не является решением, потому что в раздельном представлении на iPad список разговоров и текущий чат открыты вместе.