SwiftUI 绑定到父视图重新渲染子视图

SwiftUI Binding to parent view re-renders child view

我有一个从父视图获得绑定的子视图,它控制应用程序的侧边栏菜单。当我单击按钮切换 showSidebar 并打开菜单时,我的 vm 被重新创建,因为视图被重新渲染?有没有办法在不影响视图模型的情况下做到这一点?

struct OnboardingView: View {
    @Environment (\.presentationMode) var presentationMode
    @ObservedObject private var vm: OnboardingViewModel
    @State private var filtering = false
    @Binding var showSidebar: Bool

init(showSidebar: Binding<Bool>) {
    self._showSidebar = showSidebar
    self.vm = OnboardingViewModel()
}

试试这个...

改变这个

@ObservedObject private var vm: OnboardingViewModel

@StateObject private var vm: OnboardingViewModel = OnboardingViewModel()

并摆脱

init(showSidebar: Binding<Bool>) {
    self._showSidebar = showSidebar
    self.vm = OnboardingViewModel()
}

it’s unsafe to create an observed object inside a view without an @StateObject

https://developer.apple.com/documentation/swiftui/managing-model-data-in-your-app