Sobes.tech
Junior — Middle

Je možné sa v určitých scenároch vyhnúť použitiu StateObject?

sobes.tech AI

Odpoveď od AI

Áno, v niektorých scenároch je možné sa vyhnúť používaniu @StateObject.

@StateObject je určený na vytváranie a uchovávanie ObservableObject vo vnútri View, aby pretrval počas opätovného vykresľovania. Ak je objekt vytvorený a spravovaný mimo View (napríklad v rodičovskom komponentu alebo pomocou Dependency Injection), podriadené View môžu použiť @ObservedObject alebo @EnvironmentObject na prístup k tomuto objektu bez nutnosti ho znova vytvárať.

Príklad:

class Model: ObservableObject {
    @Published var value = 0
}

struct ParentView: View {
    @StateObject private var model = Model()

    var body: some View {
        ChildView(model: model)
    }
}

struct ChildView: View {
    @ObservedObject var model: Model

    var body: some View {
        Text("Hodnota: \(model.value)")
    }
}

Tu je @StateObject použitý iba v rodičovskom View, a podriadené View získava odkaz cez @ObservedObject. Týmto spôsobom, ak je objekt vytvorený mimo View alebo odovzdaný zhora, @StateObject nie je povinné.