导航链接错误

NavigationLink Bug

我有这两种看法:

import SwiftUI
import QGrid

struct CategoriasCanales: View {
    @Binding var logueado:Bool
    @ObservedObject var categorias = CargarCategoriasCanales()
    
    var body: some View {
        NavigationView{
            QGrid(self.categorias.listaCategoriasCanales, columns: 3){item in
                NavigationLink(destination:VerCanales(categoria: item.categoryID)){
                    Text(item.categoryName).frame(width:400, height:50)
                }
            }
            
        }
    }
}

import SwiftUI
import QGrid

struct VerCanales: View {
    
   
    private var categoria: String
    @ObservedObject private var canales: CargarCanales
  
    init(categoria: String) {
        print(categoria)
            self.categoria = categoria
            self.canales = CargarCanales(categoriaID: categoria)
        }
    
    var body: some View {
        NavigationView{
            QGrid(self.canales.listaCanales, columns: 3){item in
                NavigationLink(destination:PlayerVersa(canalID: item.streamID)){
                    Text(item.name).frame(width:400, height:50)
            
                }
          
            }
            
        }
    }
}

问题是当我进入“CategoriasCanales”视图时,它运行“VerCanales”视图的初始化次数等于类别数。

我是 SwiftUI 的新手,例如在 DART 中,ChannelView init 中的 Print() 只会打印我作为参数发送的类别,而不是所有类别。

尝试使用 onAppear 而不是 init

    var body: some View {
        NavigationView{
            QGrid(self.canales.listaCanales, columns: 3){item in
                NavigationLink(destination:PlayerVersa(canalID: item.streamID)){
                    Text(item.name).frame(width:400, height:50)
            
                }
          
            }
            
        }
        .onAppear {
            print(categoria)
            self.categoria = categoria
            self.canales = CargarCanales(categoriaID: categoria)
        }
    }

NavigationLink 创建目标视图代替初始化,因此您看到调用的 VerCanales.initself.categorias.listaCategoriasCanales 计数一样多。

我假设您想推迟创建 VerCanales:(使用 中的 DeferView

NavigationLink(destination:DeferView { VerCanales(categoria: item.categoryID) }){
    Text(item.categoryName).frame(width:400, height:50)
}

注意:您不需要 VerCanales 中的第二个 NavigationView,只有一个导航视图应该在导航堆栈中,并且已经在 CategoriasCanales