如何在 SwiftUI 中推送导航 Link 时获取 运行 的函数
How to get a function to run when you push a Navigation Link in SwiftUI
在我的应用程序结束时,我有一个导航 link,它在进行 API 调用时将用户发送到屏幕。
问题是,当我按下导航 link 时,似乎发送 API 数据的功能实际上并不是 运行...我做错了什么在吗?
HStack {
Spacer()
NavigationLink(destination: Success()
.navigationBarBackButtonHidden(true)){
Text("Finish")
.foregroundColor(Color.newPrimary)
.frame(minHeight: 40)
.frame(width: 311)
.background(Color.white)
.cornerRadius(10)
.padding(.top, 30)
}
.onTapGesture {
print("Sending to Storage")
SendData().sendData(apiData: data)
}
Spacer()
}
我能想到几个解决方案。首先是在目标视图上使用 onAppear
。这比第二个解决方案的代码少,但我已经看到 onAppear
在意外时间或不止一次被触发的问题。
NavigationLink {
Success()
.navigationBarBackButtonHidden(true)
.onAppear {
print("Sending to Storage")
}
} label: {
Text("Finish")
}
另一种解决方案是绑定一个变量到NavigationLink
的isActive
属性,然后使用onChange(of:perform:)
来监视变化并在值更改为 true
.
struct ContentView: View {
@State private var navIsActive = false
var body: some View {
HStack {
Spacer()
NavigationLink(isActive: $navIsActive) {
Success()
.navigationBarBackButtonHidden(true)
} label: {
Text("Finish")
}
Spacer()
}
.onChange(of: navIsActive) { newValue in
if newValue {
print("Sending to Storage")
}
}
}
}
在我的应用程序结束时,我有一个导航 link,它在进行 API 调用时将用户发送到屏幕。
问题是,当我按下导航 link 时,似乎发送 API 数据的功能实际上并不是 运行...我做错了什么在吗?
HStack {
Spacer()
NavigationLink(destination: Success()
.navigationBarBackButtonHidden(true)){
Text("Finish")
.foregroundColor(Color.newPrimary)
.frame(minHeight: 40)
.frame(width: 311)
.background(Color.white)
.cornerRadius(10)
.padding(.top, 30)
}
.onTapGesture {
print("Sending to Storage")
SendData().sendData(apiData: data)
}
Spacer()
}
我能想到几个解决方案。首先是在目标视图上使用 onAppear
。这比第二个解决方案的代码少,但我已经看到 onAppear
在意外时间或不止一次被触发的问题。
NavigationLink {
Success()
.navigationBarBackButtonHidden(true)
.onAppear {
print("Sending to Storage")
}
} label: {
Text("Finish")
}
另一种解决方案是绑定一个变量到NavigationLink
的isActive
属性,然后使用onChange(of:perform:)
来监视变化并在值更改为 true
.
struct ContentView: View {
@State private var navIsActive = false
var body: some View {
HStack {
Spacer()
NavigationLink(isActive: $navIsActive) {
Success()
.navigationBarBackButtonHidden(true)
} label: {
Text("Finish")
}
Spacer()
}
.onChange(of: navIsActive) { newValue in
if newValue {
print("Sending to Storage")
}
}
}
}