- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 onChange
观察 View 上的属性修饰符。但是,我也希望在初始值上运行同一段代码,因为有时数据会注入(inject)到初始化程序中或稍后异步加载。
例如,我有一个注入(inject)模型的 View 。有时,此模型中开始包含数据(如预览),或者从网络异步检索。
class MyModel: ObservableObject {
@Published var counter = 0
}
struct ContentView: View {
@ObservedObject var model: MyModel
var body: some View {
VStack {
Text("Counter: \(model.counter)")
Button("Increment") { model.counter += 1 }
}
.onChange(of: model.counter, perform: someLogic)
.onAppear { someLogic(counter: model.counter) }
}
private func someLogic(counter: Int) {
print("onAppear: \(counter)")
}
}
在这两个
onAppear
和
onChange
情况下,我想运行
someLogic(counter:)
.有没有更好的方法来获得这种行为或将它们结合起来?
最佳答案
看起来像 onReceive
可能是你需要的。代替:
.onChange(of: model.counter, perform: someLogic)
.onAppear { someLogic(counter: model.counter) }
你可以这样做:
.onReceive(model.$counter, perform: someLogic)
onChange
之间的区别和
onReceive
是后者在 View 初始化时也会触发。
onChange
,您会看到它仅在值更改时才执行操作(并且在初始化 View 时不会发生这种情况)。
/// Adds a modifier for this view that fires an action when a specific
/// value changes.
/// ...
@inlinable public func onChange<V>(of value: V, perform action: @escaping (V) -> Void) -> some View where V : Equatable
onReceive
执行作为参数传递的操作。
/// Adds an action to perform when this view detects data emitted by the
/// given publisher.
/// ...
@inlinable public func onReceive<P>(_ publisher: P, perform action: @escaping (P.Output) -> Void) -> some View where P : Publisher, P.Failure == Never
onReceive
是
不是 相当于
onChange
+
onAppear
.
onAppear
在 View 出现时调用,但在某些情况下, View 可能会在不触发
onAppear
的情况下再次初始化.
关于ios - 在 SwiftUI View 中结合 onChange 和 onAppear 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64392029/
我注意到 ListView 的 OnAppear 事件有一些奇怪的行为。我认为 OnAppear 闭包会在屏幕上出现 View 时运行,但它似乎在加载列表时立即运行。 例如下面的代码: @State
我正在学习从头开始为 iOS 开发应用程序。我选择了 SwiftUI 来制作一个获取用户位置的应用程序,通过地理编码获取他所在的城市,并根据获得的信息,从 API 显示属于该城市的项目列表。 因此,我
我想避免将我的 OnBoarding View 放在导航堆栈中,以解决按下后退按钮的问题。在我的 MainPage 中,我检查 OnBoarding 是否应该出现。如果为真,我将在 OnAppeari
在 SwiftUI应用程序我有这样的代码: var body: some View { VStack { Spacer() ........ }
作为 Xamarin 表单和 MVVM 的初学者,我面临着问题。我有 tabbedpage 和 2 个页面在 tag 下。这是代码。 问题是本地的:ActiveOrderViewPage 页面 OnA
我有一个标签页 Xamarin 表单应用程序,我正在尝试自定义该应用程序。我正在从仅 IO 的应用程序迁移到所有平台。在 iOS 中,我使用了几个函数 ViewDidDisappear()、ViewD
我正在尝试在 HStack 和 VStack 中使用 forEach。我在其中使用文本,运行时文本不会出现,而是 onAppear 打印值。请看一下我的代码。为什么没有出现文本?我怎样才能做到这一点?
我正在尝试让新的 iOS 15.0 .focused() View Modifier 在 SwiftUI View 出现时执行: import SwiftUI struct MainView: Vie
如果我有这个代码: protected override async void OnAppearing() { base.OnAppearing();
我第一次限制 onAppearing()选项卡式页面的所有子页面中的方法。我需要调用onAppearing()当我更改标签时。为此,我使用 OnCurrentPageChanged()调用onAppe
在导航链接内时,SwiftUI onAppear 被多次调用。在我提供的示例中,它被调用了 5 次。这也会触发它的 StateObject 初始值设定项也被调用 5 次。如果您注释掉导航链接,它会按预
我最近看到了这个关于如何将应用程序 OnStart 变成异步 OnStart 的建议: protected override void OnStart() { this
我很难理解为什么在 .onAppear 期间 @Published EnvironmentObject 变量发生更改时 PageViewController 无法按预期工作在其父 View 中。 如果
我正在做一个简单的倒计时。我期望发生的是First计入 0 ,然后 Second计入 0 .当语句切换到 else block 时,HStack 文本在 Canvas 中消失。为什么会发生这种情况?
据我了解,onAppear 是在模式出现在屏幕上时调用处理程序。 但是,当我运行时: paste(Pattern("123.png").targetOffset(-1,37),"testText")
这是我想出的代码。它似乎有效,但我担心这可能不是做我想做的事情的好方法。我需要的是在 OnAppearing 发生后每分钟运行一个方法,并在 OnDisappearing() 时停止; protect
ON外观不会触发。我意识到,当我关闭全屏封面时,onAppar并没有触发。
ON外观不会触发。我意识到,当我关闭全屏封面时,onAppar并没有触发。
ON外观不会触发。我意识到,当我关闭全屏封面时,onAppar并没有触发。
我使用以下方法设置当前页面的页码: protected override void OnAppearing() { base.OnAppearing(); // Page number
我是一名优秀的程序员,十分优秀!