useAppContext.ts
697 Bytes
import { inject, InjectionKey, provide, reactive, readonly as defineReadonly } from 'vue'
export interface CreateContextOptions {
readonly?: boolean
createProvider?: boolean
native?: boolean
}
export function createContext<T>(context: any, key: InjectionKey<T> = Symbol(), options: CreateContextOptions = {}) {
const { readonly, createProvider, native } = options
const state = reactive(context)
const provideData = readonly ? defineReadonly(state) : state
!createProvider && provide(key, native ? context : provideData)
return {
state
}
}
export function useContext<T>(key: InjectionKey<T> = Symbol(), defaultValue?: any) {
return inject(key, defaultValue || {})
}