Diretório de Componentes
O diretório components contém os nossos componentes .vue. Os componentes constituem as diferentes partes da nossa página e podem ser reutilizados e importados para as nossas páginas, disposições e até para os outros componentes.
Requisição de dados
Para acessar dados assíncronos duma interface de programação de aplicação nos nossos componentes, podemos usar fetch()  da Nuxt.
Ao verificar $fetchState.pending, podemos mostrar uma mensagem quando os dados estiverem à espera de serem carregados. Também podemos verificar $fetchState.error e mostrar uma mensagem de erro se houver um erro na obtenção dos dados. Ao utilizar a fetch, devemos declarar as propriedades corretas em data(). Os dados provenientes da obtenção de dados podem então ser atribuídos as estas propriedades:
<template>
  <div>
    <p v-if="$fetchState.pending">Loading....</p>
    <p v-else-if="$fetchState.error">Error while fetching mountains</p>
    <ul v-else>
      <li v-for="(mountain, index) in mountains" :key="index">
        {{ mountain.title }}
      </li>
    </ul>
  </div>
</template>
<script>
  export default {
    data() {
      return {
        mountains: []
      }
    },
    async fetch() {
      this.mountains = await fetch(
        'https://api.nuxtjs.dev/mountains'
      ).then(res => res.json())
    }
  }
</script>
 fetch()  por mais detalhes sobre como a obtenção de dados funciona.Descoberta de Componentes
Desde a versão v2.13, a Nuxt pode importar automaticamente os componentes que usamos. Para ativar esta funcionalidade, definir components: true na nossa configuração:
export default {
  components: true
}
 Quaisquer componentes no diretório ~/components podem então ser usados em todas as nossas páginas, disposições (e outros componentes) sem a necessidade de importá-los explicitamente:
| components/
--| TheHeader.vue
--| TheFooter.vue
 <template>
  <div>
    <TheHeader />
    <Nuxt />
    <TheFooter />
  </div>
</template>
 Importações Dinâmicas
Para importar dinamicamente um componente, também conhecido como carregamento preguiçoso de um componente, tudo o que precisamos de fazer é adicionar o prefixo Lazy nos nossos modelos de marcação de hipertexto:
<template>
  <div>
    <TheHeader />
    <Nuxt />
    <LazyTheFooter />
  </div>
</template>
 Ao utilizar o prefixo lazy, também podemos importar dinamicamente um componente quando um evento é acionado:
<template>
  <div>
    <h1>Mountains</h1>
    <LazyMountainsList v-if="show" />
    <button v-if="!show" @click="show = true">Show List</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      show: false
    }
  }
}
</script>
 Diretórios Encaixados
Se tivermos componentes em diretórios encaixados tais omo:
components/
  base/
      foo/
         CustomButton.vue
 O nome do componente será baseado no seu próprio caminho, diretório e nome de ficheiro. Por conseguinte, o componente será:
<BaseFooCustomButton />
 Se quisermos usá-lo como <CustomButton /> mantendo a estrutura de diretório, podemos adicionar o diretório do CustomButton.vue no nuxt.config.js:
components: {
  dirs: [
    '~/components',
    '~/components/base/foo'
  ]
}
 E agora podemos usar <CustomButton /> em vez de <BaseFooCustomButton />:
<CustomButton />
 components  por outros métodos de controlo do nome do componente.
 
        Sébastien Chopin
       
 
        Nazaré da Piedade
       
 
        Nobu
       
 
        川音리오
       
 
        Maciek Palmowski
       
 
        Nestor Vera
       
 
        Daniel Roe
       
 
        Yue Yang
       
 
        Jeronimas
       
 
        Alessandro Carrano
       
 
        Clément Ollivier
       
 
        Alexander Lichter
       
 
        N3-rd
       
 
        Adrien Zaganelli
       
 
        Mag
       
 
        Stefan Huber
       
 
        Olga Bulat
       
 
        Paiva
       
 
        Florian Reuschel
       
 
        Savas Vedova
       
 
        Steven
       
 
        Vinícius Alves
       
 
        Kareem Dabbeet
       
 
        Valentín Costa
       
 
        Ryan Skinner
       
 
        Alex Hirzel
       
 
        Ajeet Chaulagain
       
 
        René Eschke
       
 
        Nico Devs
       
 
        Muhammad
       
 
        Naoki Hamada
       
 
        Tom
       
 
        Yann Aufray
       
 
        Anthony Chu
       
 
        Nuzhat Minhaz
       
 
        Lucas Portet
       
 
        Richard Schloss
       
 
        Bobby
       
 
        bpy
       
 
        Antony Konstantinidis
       
 
        Hibariya
       
 
        Jose Seabra
       
 
        Eze
       
 
        Florian Lefebvre
       
 
        Lucas Recoaro
       
 
        Julien SEIXAS