💬
[SwiftUI]if文でViewを切り替えると全体が再描画される
SwiftUIで全体の再描画の挙動
SwiftUIで実装していて、ある画面の内容を出し分ける場合がありました。具体的には、APIリクエストを送り結果があればリスト表示、エラーがあればエラーの内容表示する、といった感じです。
最初のAPIリクエストをonAppear
で呼ぶ処理を入れていたところ、何度もリクエストされてしまうという不具合が発生していました。
struct ContentView: View {
var body: View {
Group {
if 成功した場合 {
リスト表示
} else if 失敗した場合 {
エラー内容表示
} else {
空表示
}
}.onAppear {
APIリクエスト処理
}
}
}
Group
で囲っていれば、全体の再描画はされない予想でしたが、再描画されていました。
環境
- Xcode: 12.5.1
- iOS: 14.5
対策
今回のような場合、onAppear
ではなくViewのinit
やViewModel
等の初期化処理でAPIリクエスト処理を行うことで解決しました。
Discussion