

SwiftUIの再描画について教えてください。

この`View`の（１）〜（３）にブレイクポイントを貼ると、画面起動時は全てブレイクポイントが止まり、ボタン押下した場合は、全てブレイクポイントが止まりませんでした。  
実際、`List`も変化がなかったので、再描画していない認識です。

ボタンをコメントアウトしている処理に差し替えると、（１）〜（３）のブレイクポイントが止まり、ボタンの表示メッセージとともにリストも更新されました。

ここで質問なのですが、ボタンのアクションで、最初のコードでも、コメントアウトのコードでも、`@State`の変数`textContent`は更新されているので、再描画は走るものと考えていました。

SwiftUIとしては、`@State`の変数を更新しても、その変数を表示に使用していない場合は、再描画しないものという理解で良いのでしょうか？

また、この`body`にはボタン、固定の`Text`、`List`を用意しているのですが、表示に使用している`@State`の値が更新された場合は、変化のない部品も再描画されてしまうという認識で良いのでしょうか？  
（ブレイクポイントを張っている箇所に止まる＝再描画していると考えているのですが問題ないでしょうか？）  
それとも、部品だけを描画するような方法はありますか？

[code]

    import SwiftUI
    
    struct SampleView: View {
        @State var textContent = "Init..."
    
        var body: some View {
            VStack {                    （１）
    
                Button("button") {
                    // arrayStringのリストを増やす処理も実施
                    self.textContent = "Tap..."
                }
    
    //            Button(self.textContent) {
    //                // arrayStringのリストを増やす処理も実施
    //                self.textContent = "Tap..."
    //            }
    
                Text("test!")           （２）
    
                List {
                    ForEach(TestData.shared.arrayString, id: \.self) { fruit in  （３）
                        Text(fruit)
                    }
                }
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2023-10-11T08:57:08.800
96471
2023-11-12T05:55:37.133
2023-11-12T05:55:37.133
15413
12842
question
swiftui
SwiftUIの再描画について教えてください。