【问题标题】:OnAppear only once the view is openedOnAppear 仅在视图打开后
【发布时间】:2022-10-01 10:28:38
【问题描述】:

我想在打开视图时用数据更新视图,所以我添加了:

.onAppear {
    loadData()
}

但是我只想在视图打开时更新一次,而不是每次重新打开时都更新一次,例如带有后退按钮。

--> 仅在 App 启动时更新

  • 添加一个属性以跟踪它是否已加载或加载的数据是否已经存在?
  • 我的目标类似于 \'if firstTimeOpened { .onAppear { code...
  • 它不适用于跟踪属性,因为数据存储在不同的 CoreData 实体中,并且无法验证数据是否已经是最新的
  • 您是说loadData 每次出现时都会被调用,如果您只需添加一个 bool 属性以保持数据已加载或未加载的状态
  • 如果您无法验证数据是否是最新的,那么您是否不需要在每次视图出现时重新加载它?

标签: swift swiftui onappear


【解决方案1】:

您可以将值放在 UserDefaults 中,以便在第二次加载时知道您已经执行了加载。

extension UserDefaults {
    
    var firstTimeVisit: Bool {
        get {
            return UserDefaults.standard.value(forKey: "firstTimeVisit") as? Bool ?? true
        } set {
            UserDefaults.standard.setValue(newValue, forKey: "firstTimeVisit")
        }
    }
    
}

struct ContentView: View {
    
    var body: some View {
        VStack {
            
        }.task {
            if UserDefaults.standard.firstTimeVisit {
                // load Data
                UserDefaults.standard.firstTimeVisit = false
            } 
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多