
やたら細かく破棄と生成が行われるわけで、画像のリストで何度も何度のurlをリクエストするせいで、大量に通信が発生して困ってたので調査して解決して、今に至るわけです
理由はよくわからんが、実際にそうなるので、今後同じ悩みが発生した時のための備忘録
発生状況
ScrollViewReader{reader in
ScrollView{
LazyVStack{
ForEach(Items){item in
SomeView(item:item)
}
]
}
}
struct SomeView:View{
let item:itemStyle
var body: some View {
VStack{
Text("\(item.str1)")
Text("\(item.str2)")
}
}
}
つまり、LazyVStackの中にForEachがあって、その中にVStackが入ってる場合。
このVStackが入ってると、スクロールしていって、1つ前のSomeViewに戻った時に、
再度描画される状態を確認した。
ところが、このVStackを外すと、スクロールを戻しても再描画されないところをみるに、
破棄されていないのだろうと思った。
ここでVStackを使った状態だと、Textではなくてurl指定の画像だった場合、
すごい数のアクセスが発生して大変なことになるというか、わたしはなっていたのだ…
結論
Lazy系の中にStack系はいれないほうがいいということです