swiftui - 带有 NavigationView/NavigationLink 延迟的程序化导航跳回
问题描述
我创建了一个可以重现我的问题的简单展示;我正在做的是从初始视图 => View1 => View2 导航。
从初始到 View1 的导航是通过按钮点击发生的,这里没有什么特别的。
我的 View1 如下所示:
struct View1: View {
@ObservedObject private var viewModel = ViewModel()
private let includeDelay = true
var body: some View {
NavigationLink(
destination: View2(),
isActive: $viewModel.foo,
label: {
Text("View 1")
})
.onAppear(perform: {
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(includeDelay ? 500 : 0)) {
viewModel.doSomething()
}
})
}
}
class ViewModel: ObservableObject {
@Published var foo = false
func doSomething() {
foo = true
}
}
如果我将延迟包含在 中onAppear
,它会按预期工作;延迟之后,我被导航到View2
并留在那里。
但是,如果我删除延迟(或将其设置为例如 300 毫秒),我会被导航到View2
,但会立即被导航回来。我不明白这里发生了什么;为什么我$viewModel.foo
设置为 false 后设置为true
?
解决方案
推荐阅读
- react-admin - 复杂的计算字段和值,在编辑中使用 react-final-form
- c# - Automapper自定义地图配置问题
- git - 使用Git组织同一个项目不同版本的文件夹
- r - R中'mma'包的问题
- npm - zsh:命令未找到票证 (macOS)
- mysql - 如何将数据流(在本例中为 SQL)通过管道传输到需要 exec 命令行中的多个命令的 docker/podman 容器中?
- reactjs - React Material-UI 选择器如何转换矩对象和设置状态
- c++ - C++ 在两个向量之间交换一个向量
- datetime - 根据电子表格区域设置获取时间格式?
- microsoft-teams - 使用 Microsoft Graph Api 创建团队的问题