多次触发的SwiftUI列表项



我有一个简单的嵌套列表生成dissuregroup但是当我点击按钮时在子节点中,它被调用多次,其中也包括子视图初始化。

struct TopicView: View {
@ObservedObject private var levelsListVM = LevelsViewModel()
@State var isActive = false
@State var levelId : Int = 0
@State var topicId : Int = 0

var body: some View {
List {
ForEach(self.levelsListVM.levelsWithTopics, id:.level ) { level in
DisclosureGroup(
isExpanded: .constant(!level.isLock),
content: {
VStack {
ForEach(level.topics, id:.title ) { topic in
Button (action: {
self.levelId = level.level
self.topicId = topic.id
self.isActive = true
}, label: {
ImageDisplay(imageURL: topic.imageUrl).clipShape(Circle())
.background(Color.blue)
.frame(width: 50, height: 50)
}).fullScreenCover(isPresented: self.$isActive, content: {
GameTwo(level: level.level, topicId: topic.id, practiceMode: true)
})
}
}
},
label: {
HStack {
ImageDisplay(imageURL: level.levelImageUri).clipShape(Circle())
.background(Color.blue)
.frame(width: 100, height: 100, alignment: .center)
HStack {
VStack {
Text(level.levelName)
Text("Level  0 / 2 / 3").font(.subheadline)
}
}
}
}
)
}
}
.navigationTitle("Demo")
}
}

我怎样才能避免这种行为?

供参考:我使用ObservedObjectMVVM模式传递数据。

我弄清楚了为什么当swift想要加载屏幕时,它会在forEach循环中为每个项目初始化类,无论你是否点击该项目都无关紧要。

所以我需要确保在目标类初始化器中不包含任何功能。


(答案摘自此评论)

相关内容

  • 没有找到相关文章

最新更新