Contexto e Auxiliares
O contexto fornece informações adicionais e frequentemente opcionais sobre a requisição atual à aplicação.
O objeto context está disponível em funções de Nuxt específicas como asyncData , plugins , middleware e nuxtServerInit . Este fornece à aplicação informações adicionais e muitas vezes opcionais sobre a requisição atual.
Primeiro e mais importante, o contexto é utilizado para fornecer acesso a outras partes da aplicação da Nuxt, por exemplo, o armazém de estado da Vuex ou a instância subjacente connect. Desta maneira, temos os objetos req e res do contexto disponível no lado do servidor e o store sempre disponível. Mas com o tempo, o contexto foi estendido com muitas outras variáveis e atalhos úteis. Agora temos acesso às funcionalidades da substituição de módulo instantânea em modo de development, a route atual, params e query da página, bem como a opção de acessar as variáveis de ambiente através do contexto. Além disto, as funções do módulo e os auxiliares podem ser expostos através do contexto para estarem disponíveis tanto no lado do cliente como no lado do servidor.
Todas as chaves de contexto que estão presentes por padrão
function (context) { // Poderia ser `asyncData`, `nuxtServerInit`, ...
// Sempre disponíveis
const {
app,
store,
route,
params,
query,
env,
isDev,
isHMR,
redirect,
error,
$config
} = context
// Disponíveis apenas no lado do servidor
if (process.server) {
const { req, res, beforeNuxtRender } = context
}
// Disponíveis apenas no lado do cliente
if (process.client) {
const { from, nuxtState } = context
}
}
context disponível nas Ações de Vuex ou aquele disponível na função build.extend no nosso nuxt.config.js. Estes não estão relacionados entre si!Saber mais sobre as diferentes chaves de contexto no nosso Glossário Interno .
Utilizar parâmetros de página para a nossa consulta de API
O contexto expõe diretamente os possíveis parâmetros dinâmicos da rota por meio de context.params. No exemplo seguinte, chamamos uma interface de programação de aplicação através do módulo nuxt/http utilizando um parâmetro de página dinâmico como parte do endereço de localização de recurso (URL). Os módulos, como o módulo nuxt/http , podem expor as suas próprias funções, que ficam então disponíveis através do objeto context.app .
Além disto, embrulhamos a chamada à interface de programação de aplicação numa instrução try/catch para lidar com potenciais erros. Com a função context.error, podemos mostrar diretamente a página de erro da Nuxt e passar o erro ocorrido:
export default {
async asyncData(context) {
const id = context.params.id
try {
// Usar o módulo `nuxtjs/http` aqui exposto por `context.app`
const post = await context.app.$http.$get(
`https://api.nuxtjs.dev/posts/${id}`
)
return { post }
} catch (e) {
// Mostrar a página de erro seguinte com o erro lançado
context.error(e)
}
}
}
Com a ECMAScript 6 , podemos utilizar esta sintaxe para desestruturar o nosso objeto de contexto. Podemos passar os objetos a que queremos ter acesso e depois podemos utilizá-los no código sem utilizar a palavra context.
export default {
async asyncData({ params, $http, error }) {
const id = params.id
try {
// Usar o módulo `nuxtjs/http` aqui exposto por `context.app`
const post = await $http.$get(`https://api.nuxtjs.dev/posts/${id}`)
return { post }
} catch (e) {
// Mostrar a página de erro seguinte com o erro lançado
error(e)
}
}
}
Em vez disto, queremos utilizar parâmetros de consulta? Podemos então utilizar context.query.id .
Redirecionar os utilizares e acessar o armazém de estado
O acesso ao armazém de estado da Vuex (quando o temos configurado através do diretório store) também é possível através do contexto. Este fornece um objeto store que pode ser tratado como this.$store em componentes de Vue. Além disto, utilizamos o método redirect, um auxiliar exposto através do contexto, para redirecionar o utilizador no caso de o estado authenticated ser falso :
export default {
middleware({ store, redirect }) {
// recuperar chaves através de desestruturação de objetos
const isAuthenticated = store.state.authenticated
if (!isAuthenticated) {
return redirect('/login')
}
}
}
redirect .Auxiliares
Para além dos atalhos no contexto, existem outros pequenos auxiliares presentes na nossa aplicação de Nuxt.
$nuxt: O auxiliar da Nuxt
O $nuxt é um auxiliar concebido para melhorar a experiência do utilizador e para ser uma escotilha de fuga em algumas situações. É acessível por this.$nuxt em componentes de Vue e por window.$nuxt caso contrário no lado do cliente.
Verificador de conexão
O auxiliar $nuxt fornece uma maneira rápida de descobrir se a conexão de Internet de um utilizador está presente ou não: Este expõe os valores booleanos isOffline e isOnline. Podemos utilizá-los para mostrar mensagem assim que o utilizador estiver desligado da rede (por exemplo):
<template>
<div>
<div v-if="$nuxt.isOffline">You are offline</div>
<Nuxt />
</div>
</template>
Acessar à instância de raiz
Além de fornecer recursos de experiência de programação e experiência de utilização, o auxiliar $nuxt também fornece um atalho para a instância raiz da nossa aplicação a partir de todos os outros componentes. Mas isto não é tudo — nós também podemos acessar o auxiliar $nuxt através de window.$nuxt que pode ser usado como uma escotilha de fuga para ganhar acesso a métodos de módulos como $axios de fora dos nossos componentes de Vue. Isto deve ser usado sensatamente e apenas como último recurso.
Atualizar os dados da página
Quando queremos atualizar a página atual para o utilizador, não queremos recarregar totalmente a página, porque podemos atingir o servidor novamente e, pelo menos, reiniciar toda a aplicação de Nuxt. Em vez disto, muitas vezes queremos apenas atualizar os dados, fornecidos por asyncData ou fetch.
Podemos fazer isto utilizando this.$nuxt.refresh()!
<template>
<div>
<div>{{ content }}</div>
<button @click="refresh">Refresh</button>
</div>
</template>
<script>
export default {
asyncData() {
return { content: 'Created at: ' + new Date() }
},
methods: {
refresh() {
this.$nuxt.refresh()
}
}
}
</script>
Controlar a barra de carregamento
Com $nuxt, podemos também controlar a barra de carregamento da Nuxt programaticamente por this.$nuxt.$loading:
export default {
mounted() {
this.$nextTick(() => {
this.$nuxt.$loading.start()
setTimeout(() => this.$nuxt.$loading.finish(), 500)
})
}
}
Para mais informações, consultar o capítulo correspondente à funcionalidade de carregamento .
Auxiliar onNuxtReady
Se quisermos executar alguns programas depois que a nossa aplicação de Nuxt tiver sido carregada e estiver pronta, podemos usar a função window.onNuxtReady. Isto pode ser útil quando queremos executar uma função no lado do cliente sem aumentar o tempo de interação do nosso sítio:
window.onNuxtReady(() => {
console.log('Nuxt is ready and mounted')
})
Auxiliares de Processo
A Nuxt injeta três valores booleanos (client, server, e static) no objeto global process que nos ajudará a determinar se a nossa aplicação foi desenhada no servidor ou totalmente no cliente, assim como verificar a geração de sítios estáticos. Estes auxiliares estão disponíveis em toda a nossa aplicação e são normalmente utilizadas no código do utilizador de asyncData:
<template>
<h1>I am rendered on the {{ renderedOn }} side</h1>
</template>
<script>
export default {
asyncData() {
return { renderedOn: process.client ? 'client' : 'server' }
}
}
</script>
No exemplo, renderedOn avaliará como 'server' quando se utiliza a interpretação do lado do servidor e um utilizador acessar à página diretamente. Quando o utilizador navegar para a página a partir de outra parte da aplicação, por exemplo, clicando num <NuxtLink>, este avaliará como cliente.
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