基本上-我遇到了很多问题-我不明白您如何通过回调快速正确地进行异步初始化。 (结合使用-我可以做到)。特别是-我有以下代码:
<select id="my-select" onchange="changeFunc(this.value)">
<option selected disabled>Choose</option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="E">E</option>
<option value="F">F</option>
<option value="G">G</option>
</select>
<div id="record_select"></div>
当我运行它时-我将打印输出-但文本从未更改-它始终保持为“ nope”。我在做什么错,我该怎么做正确呢? (无需使用合并-我可以像currentValueSubject和.onreceive一样来完成它-但这是额外的开销,我真的很想知道为什么上面的代码不起作用-显然我理解不好)
答案 0 :(得分:1)
状态尚未在init
中准备好,因此您无处可去。此外,init
中的此类活动并不好,因为在渲染期间可以多次创建视图。更合适的地方是.onAppear
struct MyView : View {
@State var initialised : Bool = false
var body : some View {
VStack {
if (initialised) {
Text("yep")
} else {
Text("nope")
}
}.onAppear {
Photos.PHPhotoLibrary.RequestAuthorization {
status in
if (status == Photos.PHAuthorizationStatus.authorized) {
print("here I am")
self.initialised = true
}
}
}
}
}