Nuxt.js'in bize sunduğu bir başka özellik olan nuxt-child iç içe route yapılarını kullanmamıza olanak sağlamaktadır.
Örneğin bir blog sayfamızın olduğunu düşünelim ve bu blog sayfamızda header ve footer bölümleri sabit bu iki bölümün arasında kalan kısımlar değişkenlik göstermekte. Bu durumda normal şartlarda bir header birde footer componenti oluşturup tüm ilişkili sayfalarda bu componentleri çağırmamız gerekmektedir. Fakat nuxt-child yapısını kullanarak bu işlemi daha kolay ve işlevsel hale getirebiliriz.
Öncelikle bir nuxt projesi oluşturalım.
yarncreatenuxt-app<project-name>
Daha sonra pages klasörümüz içerisine blog adında bir klasör oluşturup index.vue componentini tanımlayalım. Bu component /blog isteklerini yakalayacaktır. Şimdi birde dinamik olarak /blog/blog-adi path'ine gelen istekleri yakalayacak yapımızı oluşturalım.
NOT:Nuxt.js routing hakkında bilgi sahibi değilsen bu yazıyı incelemeni öneririm.
İstekleri yakalamak için blog klasörümüz içerisinde _name adında bir klasör oluşturup içerisine index.vue componentimizi tanımlıyoruz. Bu şekilde genel yapımızı oluşturmuş olduk. Şimdi componentlerimizin içerisini basit şekilde tasarlayalım.
blog/index.vue componentimiz içerisini bootstrap 4'ün örnek blog sayfalarından birini kopyalayarak oluşturalım.
Componentlerimizin içerisini incelediğimizde her iki sayfada ortak olan ve yerleri sabit olan 2 adet yapımız var. Bunlar header ve footer yapıları. Bu yapıları yazının başında dediğim gibi component haline getirerek ihtiyacımız olan yerlerde kullanabiliriz. Fakat zaten bu footer ve header yapıları bize tüm blog ve bloğun alt sayfalarında gerek olacağı için nuxt-child yapısını kullanarak bu durumu çözebiliriz.
Şimdi pages klasörümüz içerisinde blog.vue adında bir component oluşturalım.
Daha sonra diğer blog sayfalarımızda ortak olan header ve footer yapılarını diğer sayfalarımızdan kaldırarak blog.vue componenti içerisine aktaralım. Daha sonra header ve footer tagları arasına <nuxt-child />componentini çağıralım. Bu yapı ile blog ve bloğun tüm alt route'larına gelen istekler header ve footer yapılarımız arasında bulunan nuxt-child componenti ile render edilecektir. Artık /blog veya /blog/blog-adimiz sayfalarında gezindiğimizde header ve footer componentlerimizin otomatik olarak geleceğini göreceğiz.
NOT: Oluşturduğumuz blog.vue dosyasının adı farklı olsaydı nuxt.js bize hata verecekti. nuxt-child ilişkisinin kurulması için ana route ve oluşuturulan component adı aynı olmak zorundadır.