首页 > 解决方案 > 仅在 View 中输入数据时,获取数据的最佳方法是什么?

问题描述

当 View 打开时,我需要从 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 每次导航时都有效。导航返回时列表返回顶部。解决这个问题的最佳方法是什么?

标签: swiftuiinit

解决方案


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

   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 。


推荐阅读