我得到了一個 EnvironmentObject,它通過連接到 Firestore 的快照偵聽器跟蹤當前用戶。
當資料庫更新時,它會按預期觸發 EnvironmentObject,但是當在帶有 NavigationLink 的子視圖中時,更新會關閉視圖,在這種情況下, PostView 在呼叫 likePost() 時會被關閉。
視圖不應該在后臺更新嗎?
為什么會發生這種情況,避免這種情況的最佳方法是什么?
class CurrentUser: ObservableObject {
@Published var user: User?
init() {
loadUser()
}
func loadUser() {
// firebase addSnapshotListener that sets the user property
}
}
主視圖
struct MainView: View {
@StateObject var currentUser = CurrentUser()
var body some view {
TabView {
PostsView()
.enviromentObject(currentUser)
.tabItem {
Label("Posts", systemImage: "square.grid.2x2.fill")
}
}
}
}
顯示所有帖子
struct PostsView: View {
@ObservableObject var viewModel = PostsViewModel()
@EnviromentObject var currentUser: CurrentUser
var body some view {
NavigationLink(destination: PostView()) {
HStack {
// Navigate to post item
}
}
}
}
顯示帖子詳細資訊
當我在這個視圖上喜歡一個帖子時,它會被添加到 Firestore 的檔案中,并觸發快照監聽器。這會導致 PostView 被解雇,這不是我想要的
struct PostView: View {
@ObservableObject var viewModel: PostViewModel
var body some view {
PostItem()
Button("Like Post") {
likePost()
// Saves the post into the current users "likedPosts" document field in Firestore
// This trigger the snapshotListener in currentUser and
}
}
}
uj5u.com熱心網友回復:
好像PostsView被替換了,嘗試StateObject在里面使用,像
struct PostsView: View {
@StateObject var viewModel = PostsViewModel() // << here !!
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/367366.html
