swiftui - 仅在 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 每次导航时都有效。导航返回时列表返回顶部。解决这个问题的最佳方法是什么?
解决方案
首先,视图不应该直接从视图模型作业中获取数据。
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 。
推荐阅读
- excel - Excel动态下拉使用分号分隔的数据
- questdb - Flyway迁移期间的预期“表格”
- c# - 无法从“C:\Program Files\WindowsPowerShell\Modules\MSOnline\1.1.183.57\PSModule\”加载 PSModule。试图加载不正确的格式
- python - 为什么在运行“pip install -r requirements.txt”时出现错误“找不到满足要求 scipy==1.5.3 的版本”?
- firebase - 如何发送和接收预定通知 FCM Flutter
- .net-core - GitLab 包注册表 Nuget 包每组
- python - FastAPI swaggerUI 两次显示嵌套路由
- android - EditText 中的 IndexOutOfBoundException
- laravel - 获取要显示的外键值以显示在资源中的问题
- javascript - 使用 spotify SDK、JS 的问题。Uncaught (in promise) ReferenceError: Spotify is not defined