Requisição de Dados
Na Nuxt 2, temos duas maneiras de obter dados duma interface de programação de aplicação. Podemos utilizar o método fetch ou o método asyncData.
A Nuxt suporta os padrões tradicionais da Vue para carregar dados na nossa aplicação do lado do cliente, como buscar dados na função gatilho mounted() de um componente. As aplicações universais, no entanto, precisam de utilizar funções gatilhos específicas da Nuxt para poderem desenhar os dados durante a interpretação do lado do servidor. Isto permite que a nossa página seja desenhada com todos os dados necessários presentes.
A Nuxt tem duas funções gatilhos para o carregamento assíncrono de dados:
- 
asyncData. Esta função gatilho só pode ser colocada em componentes de página. Ao contrário dafetch, esta função gatilho não exibe um marcador de posição de carregamento durante a interpretação do lado do cliente: em vez disto, esta função gatilho bloqueia a navegação da rota até esta ser resolvida, exibindo um erro de página se falhar. - 
fetch(Nuxt 2.12+). Esta função gatilho pode ser colocada em qualquer componente e fornece atalhos para desenhar os estados de carregamento (durante a interpretação do lado do cliente) e erros. 
Estas funções gatilhos podem ser utilizadas com qualquer biblioteca de recolha de dados que escolhermos. Nós recomendamos utilizar @nuxt/http  ou @nuxt/axios  para fazer requisições às interfaces de programação de aplicação do protocolo de transferência de hipertexto. Mais informações sobre estas bibliotecas, tais como guias para configurar cabeçalhos de autenticação, podem ser encontradas na respetivas documentação.
fetch ou asyncData dentro de uma mistura e também tivermos definido num componente ou página, a função de mistura será substituída em vez de ser chamada.A Função Gatilho fetch 
fetch diferente que só funcionava para componentes de página e não tinha acesso à instância do componente.Se a nossa fetch() aceitar um argumento de context, esta será tratada como uma função gatilho de busca de dados legada. Esta funcionalidade está depreciada e deve ser substituída por asyncData ou por um intermediário anónimo .A função fetch é uma função gatilho chamada durante a interpretação do lado do servidor após a instância do componente ser criada, e no cliente ao navegar. A função gatilho de busca de dados deve retornar uma promessa (seja explicitamente, ou implicitamente usando async/await) que será resolvida:
- No servidor, antes da página inicial ser interpretada.
 - No cliente, algum tempo após o componente ser montado.
 
Utilização
Obtenção Dados
Dentro da função gatilho de busca de dados, teremos acesso à instância do componente através da this.
data(). Em seguida, os dados provenientes da busca de dados podem ser atribuídos a estas propriedades.Alteração do Comportamento de Busca de Dados
- 
fetchOnServer:BooleanouFunction(predefinida como:true), chamafetch()quando a página é interpretada pelo servidor. - 
fetchKey:StringouFunction(por predefinição é o identificador único do âmbito de aplicação do componente ou o nome do componente), uma chave (ou uma função que produz uma chave exclusiva) que identifica o resultado da busca de dados deste componente (disponível na Nuxt 2.15+). Ao hidratar uma página interpretada do lado do servidor, esta chave é usada para mapear o resultado dafetch()do lado do servidor para os dados do componente do lado do cliente. Mais informações disponíveis no pedido original de atualização do repositório . - 
fetchDelay:Integer(predefinida como:200), define o tempo mínimo de execução em milissegundos (para evitar intermitências rápidas). 
Quando fetchOnServer é falso (false ou retorna false), a fetch será chamada apenas no lado do cliente e $fetchState.pending retornará true quando o componente for interpretado do lado do servidor:
export default {
  data: () => ({
    posts: []
  }),
  async fetch() {
    this.posts = await this.$http.$get('https://api.nuxtjs.dev/posts')
  },
  fetchOnServer: false,
  // vários componentes podem retornar a mesma `fetchKey` e
  // a Nuxt rastreará ambos separadamente.
  fetchKey: 'site-sidebar',
  // alternativamente, para um maior controlo,
  // pode ser passada uma função com acesso à instância do componente.
  // Será chamada em `created` e não deve depender de dados obtidos.
  fetchKey(getCounter) {
    // `getCounter` é um método que pode ser chamado para obter
    // o número seguinte numa sequência
    // como parte da geração duma única `fetchKey`.
    return this.someOtherData + getCounter('sidebar')
  }
}
 Acessar o Estado da Busca de Dados
A função gatilho fetch expõe this.$fetchState no nível do componente com as seguintes propriedades:
- 
pendingé umBooleanque nos permite mostrar um marcador de posição quandofetché chamada no lado do cliente. - 
erroré umnullou umErrorlançado pela função gatilho de busca de dados - 
timestampé um marcador de tempo da última busca de dados, útil para armazenar transitoriamente comkeep-alive. 
Além da fetch ser chamada pela Nuxt, podemos chamar manualmente a fetch no nosso componente (para, por exemplo, recarregar os seus dados assíncronos) ao chamar this.$fetch():
<template>
  <div>
    <p v-if="$fetchState.pending">Fetching mountains...</p>
    <p v-else-if="$fetchState.error">An error occurred :(</p>
    <div v-else>
      <h1>Nuxt Mountains</h1>
      <ul>
        <li v-for="mountain of mountains">{{ mountain.title }}</li>
      </ul>
      <button @click="$fetch">Refresh</button>
    </div>
  </div>
</template>
<script>
  export default {
    data() {
      return {
        mountains: []
      }
    },
    async fetch() {
      this.mountains = await fetch(
        'https://api.nuxtjs.dev/mountains'
      ).then(res => res.json())
    }
  }
</script>
 this.$nuxt.context.Ouvir as Alterações da Sequência de Caracteres de Consulta
A função gatilho fetch não é chamada sobre as mudanças da sequência de caracteres de consulta por padrão. Para observar as alterações na consulta, podemos adicionar um observador sobre $route.query e chamar $fetch:
export default {
  watch: {
    '$route.query': '$fetch'
  },
  async fetch() {
    // Chamado também sobre as mudanças da consulta
  }
}
 Armazenamento em Memória Transitória
Podemos usar a diretiva keep-alive nos componentes <nuxt/> e <nuxt-child/> para economizar chamadas de fetch em páginas que já visitamos:
<template>
  <nuxt keep-alive />
</template>
 Também podemos especificar as propriedades  passadas para <keep-alive> passando uma propriedade keep-alive-props para o componente <nuxt>:
<nuxt keep-alive :keep-alive-props="{ max: 10 }" />
 Mantém apenas 10 componentes de página na memória.
Manipulação de Erro
redirect ou error da Nuxt dentro de fetch(). Em vez disto, precisamos de o tratar dentro do nosso componente utilizando $fetchState.error.Podemos verificar a $fetchState.error e mostrar uma mensagem de erro se houver um erro na obtenção de dados:
<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>
 Usar a Função Gatilho activated 
A Nuxt preencherá diretamente a this.$fetchState.timestamp (o registo de data e hora) da última chamada de fetch (interpretação do lado do servidor incluída). Podemos utilizar esta propriedade combinada com a função gatilho activated para adicionar uma memória transitória de 30 segundos a fetch:
<template> ... </template>
<script>
  export default {
    data() {
      return {
        posts: []
      }
    },
    activated() {
      // Chamar novamente a `fetch` se a última chamada de `fetch`
      // ocorreu há mais de 30 segundos.
      if (this.$fetchState.timestamp <= Date.now() - 30000) {
        this.$fetch()
      }
    },
    async fetch() {
      this.posts = await fetch('https://api.nuxtjs.dev/posts').then(res =>
        res.json()
      )
    }
  }
</script>
 A navegação para a mesma página não chamará a fetch se a última chamada da fetch ocorreu há menos de 30 segundos.
Dados Assíncronos
A asyncData é outra função gatilho para a obtenção universal de dados. Ao contrário da fetch, que exige que definamos propriedades na instância do componente (ou despachemos ações da Vuex) para guardar o nosso estado assíncrono, a asyncData simplesmente combina o seu valor de retorno com o estado local do nosso componente. Eis um exemplo usando a biblioteca @nuxt/http :
<template>
  <div>
    <h1>{{ post.title }}</h1>
    <p>{{ post.description }}</p>
  </div>
</template>
<script>
  export default {
    async asyncData({ params, $http }) {
      const post = await $http.$get(`https://api.nuxtjs.dev/posts/${params.id}`)
      return { post }
    }
  }
</script>
 Ao contrário da fetch, a promessa retornada pela função gatilho asyncData é resolvida durante a transição da rota. Isto significa que nenhum “marcador de posição de carregamento” é visível durante as transições do lado do cliente (embora a barra de carregamento  possa ser utilizada para indicar um estado de carregamento ao utilizador). A Nuxt esperará que a função gatilho asyncData ser finalizada antes de navegar para a próxima página, ou exibirá a página de erro .
Esta função gatilho só pode ser utilizada para componentes do nível de página. Ao contrário da fetch, asyncData não pode acessar a instância do componente (this). Em vez disto, recebe o contexto  como argumento. Podemos utilizá-la para buscar alguns dados e a Nuxt fará automaticamente uma fusão superficial do objeto retornado com os dados do componente.
Nos próximos exemplos, utilizamos @nuxt/http , o qual recomendamos para obtenção de dados duma interface de programação de aplicação.
Dados Assíncrono nos Componentes?
Uma vez que os componentes não têm um método asyncData, não podemos obter diretamente dados assíncronos do lado do servidor dentro de um componente. Para contornar esta limitação, temos três opções básicas:
- 
Usar a nova função gatilho 
fetch)(#a-função-gatilho-fetch) que está disponível na Nuxt 2.12 e versões posteriores. - 
Fazer a chamada à interface de programação de aplicação na função gatilho 
mountede definir as propriedades dos dados quando carregados. Desvantagem: Não funcionará para a interpretação do lado do servidor. - 
Fazer a chamada à interface de programação de aplicação no método 
asyncDatado componente de página e passar os dados como propriedades aos subcomponentes. A interpretação do servidor funcionará corretamente. Desvantagem: a função gatilhoasyncDatada página pode ser menos legível porque carrega os dados para outros componentes. 
Ouvir as Alterações da Consulta
Por predefinição, o método asyncData não é chamado sobre as alterações da sequência de caracteres de consulta. Se quisermos mudar este comportamento, por exemplo, ao construir um componente de paginação, podemos definir parâmetros que devem ser ouvidos com a propriedade watchQuery do nosso componente de página.
watchQuery não funcionará corretamente para sítios gerados de maneiras estática. Para isto funcionar, usamos a nova função gatilho fetch  e ouvimos as alterações da sequência de caracteres de consulta .watchQuery  e consultar a lista de chaves disponíveis no contexto .
 
        Sébastien Chopin
       
 
        Nazaré da Piedade
       
 
        Nobu
       
 
        川音리오
       
 
        Maciek Palmowski
       
 
        Nestor Vera
       
 
        Daniel Roe
       
 
        Yue Yang
       
 
        Jeronimas
       
 
        Clément Ollivier
       
 
        Alexander Lichter
       
 
        N3-rd
       
 
        Adrien Zaganelli
       
 
        Mag
       
 
        Stefan Huber
       
 
        Olga Bulat
       
 
        Paiva
       
 
        Florian Reuschel
       
 
        Savas Vedova
       
 
        HIJACK
       
 
        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