Context and Helpers

nuxt-js-context-keys

Objek context tersedia dalam fungsi Nuxt tertentu seperti asyncDatapluginsmiddleware dan nuxtServerInit. Ini memberikan additional dan seringkali informasi opsional tentang permintaan saat ini ke aplikasi.

Pertama dan terpenting, context digunakan untuk menyediakan akses ke bagian lain dari aplikasi Nuxt.js, mis. penyimpanan Vuex atau instance connect yang mendasarinya. Jadi, kami memiliki objek req dan res dalam context yang tersedia di sisi server dan store selalu tersedia. Namun seiring waktu, contextnya diperluas dengan banyak variabel dan pintasan bermanfaat lainnya. Sekarang kita memiliki akses ke fungsionalitas HMR dalam mode development, route saat ini, halaman params dan query, serta opsi untuk mengakses variabel lingkungan melalui context. Selanjutnya, fungsi modul dan pembantu dapat diekspos melalui context untuk tersedia di kedua sisi - sisi klien dan server.

Semua kunci context yang ada secara default

function (context) { // Bisa menggunakan asyncData, nuxtServerInit, ...
  // Selalu tersedia
  const {
    app,
    store,
    route,
    params,
    query,
    env,
    isDev,
    isHMR,
    redirect,
    error,
   $config
  } = context

  // Hanya tersedia disisi Server-side
  if (process.server) {
    const { req, res, beforeNuxtRender } = context
  }

  // Hanya tersedia disisi Client-side
  if (process.client) {
    const { from, nuxtState } = context
  }
}

Context yang kami rujuk di sini tidak sama dengan objek context yang tersedia di Vuex Actions atau yang tersedia di build.extend di nuxt.config.js Anda. Ini semua tidak berhubungan satu sama lain!.

Pelajari lebih lanjut tentang kunci context yang berbeda di Internals Glossary kami.

Contoh

Menggunakan parameter halaman untuk API Query Anda

Context secara langsung memperlihatkan kemungkinan parameter dinamis dari rute melalui context.params. Pada contoh berikut, kami memanggil API melalui modul nuxt/http menggunakan parameter halaman dinamis sebagai bagian dari URL. Modul, seperti modul nuxt/http, dapat menampilkan fungsi sendiri yang kemudian tersedia melalui objek context.app.

Selain itu, kami membungkus panggilan API dalam pernyataan try/catch untuk menangani potensi kesalahan. Dengan fungsi context.error, kita bisa langsung menampilkan halaman kesalahan Nuxt dan meneruskan kesalahan yang terjadi.

pages/posts/_id.vue
export default {
  async asyncData(context) {
    const id = context.params.id
    try {
      // Menggunakan modul nuxtjs/http di sini diekspos melalui context.app
      const post = await context.app.$http.$get(
        `https://api.nuxtjs.dev/posts/${id}`
      )
      return { post }
    } catch (e) {
      context.error(e) // Tampilkan halaman nuxt error dengan kesalahan yang dilemparkan
    }
  }
}

Dengan ES6 Anda dapat menggunakan sintaks ini untuk mendeskripsikan objek context Anda. Anda dapat memasukkan objek yang ingin Anda akses dan kemudian Anda dapat menggunakannya dalam kode tanpa menggunakan kata context.

pages/posts/_id.vue
export default {
  async asyncData({ params, $http, error }) {
    const id = params.id

    try {
      // Menggunakan modul nuxtjs/http di sini diekspos melalui context.app
      const post = await $http.$get(`https://api.nuxtjs.dev/posts/${id}`)
      return { post }
    } catch (e) {
      error(e) // Tampilkan halaman nuxt error dengan kesalahan yang dilemparkan
    }
  }
}

Ingin menggunakan parameter query Anda? kemudian Anda menggunakan context.query.id then.

Redirecting user & mengakses store

Mengakses Vuex store (jika Anda telah mengaturnya melalui direktori store) juga dimungkinkan melalui context. Ini menyediakan objek store yang dapat diperlakukan sebagai this.$store dalam komponen Vue. Selain itu, kami menggunakan metode redirect, helper yang diekspos melalui context, untuk mengarahkan pengguna jika status authenticated salah.

export default {
  middleware({ store, redirect }) {
    // mengambil kunci melalui object destructuring
    const isAuthenticated = store.state.authenticated
    if (!isAuthenticated) {
      return redirect('/login')
    }
  }
}

Helpers

Selain pintasan dalam context, ada juga pembantu kecil lainnya yang ada di aplikasi Nuxt.js Anda.

$nuxt: helper Nuxt.js

$nuxt adalah helper yang dirancang untuk meningkatkan pengalaman pengguna dan menjadi jalan keluar dalam beberapa situasi. Ia dapat diakses melalui this.$nuxt di komponen Vue dan melalui window.$nuxt jika tidak di sisi klien.

Pemeriksa koneksi

Helper $nuxt menyediakan cara cepat untuk mengetahui apakah koneksi internet pengguna ada atau tidak: Ini mengekspos nilai boolean isOffline dan isOnline. Kita dapat menggunakan ini untuk menampilkan pesan segera setelah pengguna offline (misalnya).

layouts/default.vue
<template>
  <div>
    <div v-if="$nuxt.isOffline">Anda sedang offline</div>
    <Nuxt />
  </div>
</template>

Mengakses instance root

Selain menyediakan fitur DX/UX, helper $nuxt juga menyediakan jalan pintas ke instance root aplikasi Anda dari setiap komponen lainnya. Tetapi itu belum semuanya, Anda juga dapat mengakses helper $nuxt melalui window.$nuxt yang dapat digunakan sebagai jalan keluar untuk mendapatkan akses ke metode modul seperti $axios dari luar komponen Vue Anda. Bagaimanapun, ini harus digunakan dengan bijak dan hanya sebagai pilihan terakhir.

Menyegarkan halaman data

Saat Anda ingin menyegarkan halaman saat ini untuk pengguna, Anda tidak ingin memuat ulang halaman sepenuhnya karena Anda mungkin menekan server lagi dan setidaknya menginisialisasi ulang seluruh aplikasi Nuxt.js. Sebagai gantinya, Anda sering kali hanya ingin menyegarkan data, yang disediakan oleh asyncData atau fetch.

Anda dapat melakukannya dengan menggunakan this.$nuxt.refresh()!

<template>
  <div>
    <div>{{ content }}</div>
    <button @click="refresh">Segarkan</button>
  </div>
</template>

<script>
  export default {
    asyncData() {
      return { content: 'Tambahkan waktu: ' + new Date() }
    },
    methods: {
      refresh() {
        this.$nuxt.refresh()
      }
    }
  }
</script>

Mengontrol loading bar

Dengan $nuxt, Anda juga dapat mengontrol loading bar Nuxt secara terprogram melalui this.$nuxt.$loading.

export default {
  mounted() {
    this.$nextTick(() => {
      this.$nuxt.$loading.start()
      setTimeout(() => this.$nuxt.$loading.finish(), 500)
    })
  }
}

Baca lebih lanjut di bab fitur loading yang sesuai

Helper onNuxtReady

Jika Anda ingin menjalankan beberapa skrip setelah aplikasi Nuxt.js Anda telah dimuat dan siap, Anda dapat menggunakan fungsi window.onNuxtReady. Ini dapat berguna saat Anda ingin menjalankan fungsi di sisi klien tanpa menambah waktu untuk interaktif di situs Anda.

window.onNuxtReady(() => {
  console.log('Nuxt.js sudah siap dan dipasang')
})

Proses helpers

Nuxt.js memasukkan tiga nilai boolean ke dalam objek process global yang akan membantu Anda menentukan apakah aplikasi Anda dirender di server atau sepenuhnya di klien, serta memeriksa pembuatan situs statis. Helper ini tersedia di seluruh aplikasi Anda dan biasanya digunakan dalam kode userland asyncData.

pages/about.vue
<template>
  <h1>Saya dirender di sisi {{ renderedOn }}</h1>
</template>

<script>
  export default {
    asyncData() {
      return { renderedOn: process.client ? 'client' : 'server' }
    }
  }
</script>

Dalam contoh, renderedOn akan dievaluasi ke 'server' saat menggunakan rendering sisi server dan pengguna mengakses halaman secara langsung. Saat pengguna membuka halaman dari bagian lain aplikasi, misalnya. dengan mengklik pada <NuxtLink>, itu akan mengevaluasi ke klien.

Kontributor

Jumpa kesalahan atau ingin berkontribusi pada dokumentasi ini? Sunting halaman ini di GitHub!