やたら細かく破棄と生成が行われるわけで、画像のリストで何度も何度の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系はいれないほうがいいということです

コメント