onAppear 不触发
struct ProfileView: View {
@StateObject var viewModel = ProfileViewViewModel()
var body: some View {
NavigationView {
VStack {
if let user = viewModel.user {
profile(user: user)
} else {
Text("Loading Profile...")
}
}
.navigationTitle("Profile")
}
.onAppear {
viewModel.fetchUser() //this is the problem
}
.fullScreenCover(isPresented: $viewModel.showingPreview) {
PreviewAvatarView()
}
}
}
我意识到当我关闭全屏覆盖时 onAppear 没有触发。
您可以使用
onAppear
,而不是使用 task
。
struct ProfileView: View {
@StateObject var viewModel = ProfileViewViewModel()
var body: some View {
NavigationView {
VStack {
if let user = viewModel.user {
profile(user: user)
} else {
Text("Loading Profile...")
}
}
.navigationTitle("Profile")
}
.task(id: viewModel.showingPreview) {
guard !viewModel.showingPreview else {return} //Check for false
viewModel.fetchUser() //this is the problem
}
.fullScreenCover(isPresented: $viewModel.showingPreview) {
PreviewAvatarView()
}
}
}
task
将运行 onAppear
并且当 Bool
为 false
时。
onAppear
不会触发,因为你的底层视图没有出现——覆盖它的视图正在消失,这不是一回事。
但是,
fullScreenCover
有一个很少使用的可选参数,onDismiss
,它可能会满足您的需求,例如:
.fullScreenCover(
isPresented: $viewModel.showingPreview,
onDismiss: { view model.fetchUser() }
) {
PreviewAvatarView()
}