FirstView Appeared
打印两次。首次加载 View 时一次,选择 NavigationLink 时再次加载。
import SwiftUI
struct FirstView: View {
var body: some View {
NavigationView{
ZStack{
Text("FirstView").onAppear(perform: {print("FirstView Appeared")})
NavigationLink(destination: SecondView()) {
Text("Goto SecondView")
}.offset(y: 50)
}
}
}
}
struct SecondView: View {
var body: some View {
Text("SecondView").onAppear(perform: {print("SecondView Appeared")})
}
}
在模拟器和个人设备上运行上面的代码在Xcode 12.0 beta中,在选择NavigationLink时,在下面的Xcode 12.0 Beta中会产生下面的输出:FirstView Appeared
FirstView Appeared
SecondView Appeared
这是 onAppear() 预期行为的重复吗?如果是这样,在
firstview
时加载一些数据的最佳做法是什么?已创建,然后返回 firstview
(因为 onAppear() 在导航离开 firstView
时会尝试加载一些数据)
最佳答案
我知道我参加聚会有点晚了,但如果其他人遇到同样的问题,只需将生命周期方法放在 NavigationView
之外为我工作。我正在模拟器上测试 - Xcode 12.2
struct fakeView1: View {
func didAppear() {
print("Appear")
}
func didDisappear() {
print("Disppear")
}
var body: some View {
NavigationView {
VStack {
Text("FAKE VIEW")
}
}
.onAppear { didAppear() }
.onDisappear { didDisappear() }
.navigationBarTitle("Fake View", displayMode: .inline)
}
}
关于navigation - 为什么当放在 swiftUI 中的 NavigationView 内的元素上时 onAppear() 执行两次? (Xcode 12.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62788298/