2回の時だったり3回の時だったりもする。NavigationDesitinationで分岐でviewを指定すると、複数回遷移先が読まれる。どえらい仕様だったわけよ
概要
NavigationDestination の中に、ifとかswitchなどの分岐で、viewを選択させて遷移すると、どういうわけか遷移先が複数回読まれる事象が発生したんです。
結論
initを何度も読まれて困るようなものを作るなよ、くそども
※こんな強い言葉ではないですが、海外のredditにはこう書いてあった
具体的にどういう状態で発生してるのか?
具体的に以下のような書き方です
.navigationDestination(for: Route.self){ route in
if route == .nav_1 {
nav_1()
}else{
nav_2()
}
}
nav_1() とnav_2() がviewなんですけど、遷移が発生した際、該当してるviewが複数回読み込まれる状態です。
ややこしいことに、ifの場合は2回、switchの時は3回だったりと、色々ややこしいです。
なんで困ったのか?
同じ困った人のために記載しておくと、遷移先のviewのinitに、データの取得処理が入っていたんですよ。
だから、遷移した際、apiが多重にコールされる、ろくでもないことになったんです
で、対処法は何なのか?
.onAppearを使えってことらしいです。
initに期待はするなってことらしいです。
これで7日ぐらい悩んだ上、teratailのAI回答には嘘つかれるし、他には回答が来ないし、自己解決で記録しておきます。
これで助かる人がいてくれたら嬉しい。日本語で検索してもこの状況は出てこなかったし