Kliping
KlipingBerandaDokumentasiKomponenBlocksVariasiTemplateDice UIHooks
Memulai
  • Pengenalan
  • Instalasi
  • Kredit
State
  • useBoolean
  • useControllableValue
  • useCounter
  • useDebounce
  • useResetState
  • useThrottle
  • useToggle
Lanjutan
  • useCreation
  • useCustomCompareEffect
  • useLatest
  • useLockFn
  • useMemoizedFn
  • usePrevious
Siklus Hidup
  • useDebounceEffect
  • useDebounceFn
  • useDeepCompareEffect
  • useDeepCompareLayoutEffect
  • useEffectEvent
  • useEffectWithTarget
  • useInterval
  • useIsHydrated
  • useIsomorphicLayoutEffect
  • useMount
  • useThrottleEffect
  • useThrottleFn
  • useTimeout
  • useUnmount
  • useUpdate
  • useUpdateEffect
Peramban
  • useActiveElement
  • useBattery
  • useClickAnyWhere
  • useClickAway
  • useClipboard
  • useDocumentVisibility
  • useElementSize
  • useEventListener
  • useFps
  • useFullscreen
  • useHash
  • useHover
  • useInViewport
  • useIsMatchMedia
  • useIsOnline
  • useMouse
  • useNetwork
  • useOs
  • useScrollLock
  • useTextSelection
  • useTitle
Pengembangan
  • useWhyDidYouUpdate
Paket Luar
  • useMcp
  • useQuery
  • useStickToBottom
  • useSwr
Pustaka
  • isBrowser
  • createContext
  • bacaElemen
  • saatTerpasang

createContext

SebelumnyaBerikutnya

Membagi nilai ke seluruh pohon komponen tanpa mengoper prop.

Cucu membaca: terang

Nilainya diturunkan lewat provide, bukan dioper sebagai 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 galat 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 galat yang bisa langsung dibaca dari Cannot read properties of undefined di tempat yang jauh dari sebabnya.

isBrowserbacaElemen

Di halaman ini

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