【问题标题】:What is the best way to fetch data when it is only entered in View?仅在 View 中输入数据时,获取数据的最佳方法是什么?
【发布时间】:2021-05-12 21:09:34
【问题描述】:

当视图打开时,我需要从 api 获取数据。如果我习惯这样初始化;

struct ContentView: View {

    init() {
       fetchDataFunc()
    }

    var body: some View {
         ...
    }
}

当应用程序打开时,所有vievs 中的inits 都在运行。但我只想初始化唯一输入的视图。

如果我像这样使用 .onApppear;

    struct ContentView: View {

        List(viewModel.values) { value in
            NavigationLink(destination: ProjectDetailView()) {
              CellView(value: value)
           }
         }.onAppear{
             fetchDataFunc()
          }
     }

这里的问题是每次导航返回时 .onApppear 都会起作用。导航返回时列表返回顶部。解决这个问题的最佳方法是什么?

【问题讨论】:

    标签: swiftui init


    【解决方案1】:

    首先,视图不应该直接在视图模型作业中获取数据。

       struct ContentView: View {
    
        List(viewModel.values) { value in
            NavigationLink(destination: ProjectDetailView()) {
              CellView(value: value)
           }
         }.onAppear{
             viewModel.fetchDataFuncIfNeeded()
          }
     }
    

    在 fetchDataFuncIfNeeded 你可以

      fetchDataFuncIfNeeded(){
      if self.shouldFetchData == true{
       self.fetchDataFunc()
        }
       }
    

    所以只需在向后或向前导航时更新 viewModel.shouldFetchData。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 2016-07-02
      相关资源
      最近更新 更多