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
我有一个从父视图获得绑定的子视图,它控制应用程序的侧边栏菜单。当我单击按钮切换 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