kliping.pro
  • Docs
  • Directory
  • Colors
  • Typeset
Hooks
  • State7
  • Advanced6
  • Lifecycle16
  • Browser21
  • Development1
  • Third-Party4
  • Libraries4
    • isBrowser
    • createContext
    • getTargetElement
    • tryOnMounted

createContext

PreviousNext

Membagi nilai ke seluruh pohon komponen tanpa mengoper prop.

Tidak ada yang perlu dipasang.

Vue sudah menyediakan padanannya — provide() dan inject(). Halaman ini menjelaskan cara memakainya.

Vue menyediakannya sebagai dua fungsi bawaan:

ts
// Di komponen induk
import { provide } from 'vue'
provide('tema', temaRef)

// Di komponen anak, sedalam apa pun
import { inject } from 'vue'
const tema = inject('tema')

Aman tipe ​

Pakai InjectionKey supaya tipenya ikut terbawa, dan salah ketik jadi error saat build — bukan undefined saat dijalankan.

ts
// kunci.ts
import type { InjectionKey, Ref } from 'vue'

export interface Tema {
  gelap: Ref<boolean>
  balik: () => void
}

export const kunciTema = Symbol('tema') as InjectionKey<Tema>
ts
provide(kunciTema, { gelap, balik })   // induk
const tema = inject(kunciTema)          // anak — tipenya sudah `Tema`

Kalau wajib ada ​

inject mengembalikan undefined kalau tidak ada yang menyediakannya. Untuk nilai yang memang wajib, buat pembungkus kecil yang melempar dengan pesan yang menyebut sebabnya:

ts
export function pakaiTema() {
  const tema = inject(kunciTema)
  if (!tema)
    throw new Error('pakaiTema() dipanggil di luar penyedia tema')
  return tema
}

Itu yang membedakan error yang bisa langsung dibaca dari Cannot read properties of undefined di tempat yang jauh dari sebabnya.

PreviousisBrowserNext getTargetElement

On This Page

Aman tipeKalau wajib ada
Dirilis di bawah lisensi MIT. Ditulis ulang untuk Vue dari shadcn-vue, shadcn-ui-blocks, dan shadcn-hooks. Hak cipta © 2026 Kliping