es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualizar un valor de enlace vuelve a la vista principal en la pila de navegación.

Estoy pasando un vínculo de una persona desde la primera vista a la segunda vista y luego a la tercera vista. Cuando actualizo el valor del vínculo en la tercera vista, regresa a la segunda vista. Entiendo que SwiftUI actualiza las vistas que dependen del valor del estado, pero ¿es correcto que regrese a la vista actual o estoy haciendo algo mal?

struct Person: Identifiable {
    let id = UUID()
    var name: String
    var numbers = [1, 2]
}
struct FirstView: View {
    @State private var people = [Person(name: "Nombre actual")]
    var body: some View {
        NavigationView {
            List($people) { $person in
                NavigationLink(destination: SecondView(person: $person)) {
                    Text(person.name)
                }
            }
        }
    }
}
struct SecondView: View {
    @Binding var person: Person
    var body: some View {
        Form {
            NavigationLink(destination: ThirdView(person: $person)) {
                Text("Actualizar información")
            }
        }
    }
}
struct ThirdView: View {
    @Binding var person: Person
    var body: some View {
        Form {
            Button(action: {
                person.numbers.append(3)
            }) {
                Text("Agregar un nuevo número")
            }
        }
    }
}

Imagen

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, este es el comportamiento esperado. Cuando se actualiza el valor de enlace en ThirdView, SecondView se invalida porque depende de ese valor. Esto significa que SecondView se recarga y se vuelve a llamar a su propiedad body. Si SecondView tiene un NavigationLink a ThirdView, este enlace ahora estará activo nuevamente y navegará a ThirdView. Por lo tanto, este comportamiento no es un error, sino más bien una característica del marco de trabajo SwiftUI.

Comments are closed.