navigation - 为什么当放在 swiftUI 中的 NavigationView 内的元素上时 onAppear() 执行两次? (Xcode 12.0)

标签 navigation swiftui-navigationlink swiftui xcode12

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/

相关文章:

swiftui - 调整 Watch 部分中 NavigationLink 的填充/边距

navigation - 深度编程 SwiftUI NavigationView 导航

ios - 按返回键 "without"关闭软件键盘 - SwiftUI

ios - DetailView 中的 SwiftUI 核心数据绑定(bind)文本字段

swift - SKView 警告日志

android - 当导航到可组合时,我们如何隐藏 BottomAppBar(包含导航)?

c# - 使用 ContentControl 在 WPF 中显示 View 不起作用

android - 导航 popBackStack 禁止进一步导航到该 fragment

css - 没有JS依赖的基于CSS的响应式多级下拉菜单的解决方案?

swift - iOS 14、Swift UI 2 更改 NavigationLink 内所选列表项的背景颜色