我注意到在添加sheet
修饰符时,SwiftUI会完全刷新视图。
假设我有一个视图,显示随机数。我期望这个值是独立的,并且与sheet逻辑无关(每次打开/关闭sheet时都不会改变),但每次出现/解除sheet时,Text都会改变。
它应该是这样工作的吗?
我错了,@State
的主要作用是仅更新连接的视图而不是整个堆栈吗?
如何防止我的视图在呈现模态时刷新自身?
struct ContentView: View {
@State var active = false
var body: some View {
VStack {
Text("Random text: \(Int.random(in: 0...100))")
Button(action: { self.active.toggle() }) {
Text("Show pop up")
}
}
.sheet(isPresented: $active) {
Text("POP UP")
}
}
}
顺便提一下,ContentView仅在调用onAppear()
/onDisappear()
和init()
时执行一次。
View
是一个结构体,值类型,如果它的任何部分发生了改变,那么整个值都会改变。 - Asperi@State
属性。而这与经典(非SwiftUI)Swift无关。 - Dmytro Pashkov