Reactivity API: Yordamchi Dasturlar
isRef()
Qiymat ref ob'ekti ekanligini tekshiradi.
Turi
tsfunction isRef<T>(r: Ref<T> | unknown): r is Ref<T>Qaytarilgan tur type predicate ekanligini ta'kidlang, ya'ni
isReftur qo'riqchisi sifatida ishlatilishi mumkin:tslet foo: unknown if (isRef(foo)) { // foo'ning turi Ref<unknown> ga toraytiriladi foo.value }
unref()
Agar argument ref bo'lsa ichki qiymatni, aks holda argumentning o'zini qaytaradi. Bu val = isRef(val) ? val.value : val uchun shakar funksiyasi.
Turi
tsfunction unref<T>(ref: T | Ref<T>): TMisol
tsfunction useFoo(x: number | Ref<number>) { const unwrapped = unref(x) // unwrapped endi number ekanligi kafolatlanadi }
toRef()
Qiymatlarni / ref'larni / getter'larni ref'larga normalizatsiya qilish uchun ishlatilishi mumkin (3.3+).
Manba reaktiv ob'ektning xususiyati uchun ref yaratish uchun ham ishlatilishi mumkin. Yaratilgan ref o'z manba xususiyati bilan sinxronlashtiriladi: manba xususiyatini o'zgartirish ref'ni yangilaydi va aksincha.
Turi
ts// normalizatsiya imzosi (3.3+) function toRef<T>( value: T ): T extends () => infer R ? Readonly<Ref<R>> : T extends Ref ? T : Ref<UnwrapRef<T>> // ob'ekt xususiyati imzosi function toRef<T extends object, K extends keyof T>( object: T, key: K, defaultValue?: T[K] ): ToRef<T[K]> type ToRef<T> = T extends Ref ? T : Ref<T>Misol
Normalizatsiya imzosi (3.3+):
js// mavjud ref'larni o'z holatida qaytaradi toRef(existingRef) // .value ga kirishda getter'ni chaqiradigan faqat o'qish uchun ref yaratadi toRef(() => props.foo) // funksiya bo'lmagan qiymatlardan oddiy ref'lar yaratadi // ref(1) bilan ekvivalent toRef(1)Ob'ekt xususiyati imzosi:
jsconst state = reactive({ foo: 1, bar: 2 }) // original xususiyat bilan sinxronlashgan ikki tomonlama ref const fooRef = toRef(state, 'foo') // ref'ni o'zgartirish originalni yangilaydi fooRef.value++ console.log(state.foo) // 2 // originalni o'zgartirish ham ref'ni yangilaydi state.foo++ console.log(fooRef.value) // 3Bu quyidagidan farq qilishini ta'kidlang:
jsconst fooRef = ref(state.foo)Yuqoridagi ref
state.foobilan sinxronlashmaydi, chunkiref()oddiy raqam qiymatini oladi.toRef()prop'ning ref'ini kompozitsiya funksiyasiga uzatishni xohlaganingizda foydali:vue<script setup> import { toRef } from 'vue' const props = defineProps(/* ... */) // `props.foo` ni ref'ga konvertatsiya qilish, keyin // kompozitsiya funksiyasiga uzatish useSomeFeature(toRef(props, 'foo')) // getter sintaksisi - 3.3+ da tavsiya etiladi useSomeFeature(toRef(() => props.foo)) </script>toRefkomponent prop'lari bilan ishlatilganda, prop'larni o'zgartirish bo'yicha odatiy cheklovlar ham qo'llaniladi. Ref'ga yangi qiymat tayinlashni urinish prop'ni to'g'ridan-to'g'ri o'zgartirishga urinish bilan ekvivalent va ruxsat berilmaydi. Bu holatdagetvasetbilancomputedni ishlatishni ko'rib chiqishingiz mumkin. Batafsil ma'lumot uchun komponentlar bilanv-modelishlatish qo'llanmasiga qarang.Ob'ekt xususiyati imzosini ishlatganda,
toRef()manba xususiyati hozirda mavjud bo'lmasa ham ishlatilishi mumkin bo'lgan ref qaytaradi. ButoRefstomonidan aniqlanmaydigan ixtiyoriy xususiyatlar bilan ishlash imkonini beradi.
toValue()
- Faqat 3.3+ da qo'llab-quvvatlanadi
Qiymatlarni / ref'larni / getter'larni qiymatlarga normalizatsiya qiladi. Bu unref() ga o'xshaydi, faqat u getter'larni ham normalizatsiya qiladi. Agar argument getter bo'lsa, u chaqiriladi va uning qaytarilgan qiymati qaytariladi.
Bu Kompozitsiyalar da qiymat, ref yoki getter bo'lishi mumkin bo'lgan argumentni normalizatsiya qilish uchun ishlatilishi mumkin.
Turi
tsfunction toValue<T>(source: T | Ref<T> | (() => T)): TMisol
jstoValue(1) // --> 1 toValue(ref(1)) // --> 1 toValue(() => 1) // --> 1Kompozitsiyalarda argumentlarni normalizatsiya qilish:
tsimport type { MaybeRefOrGetter } from 'vue' function useFeature(id: MaybeRefOrGetter<number>) { watch(() => toValue(id), id => { // id o'zgarishlariga reaksiya }) } // bu kompozitsiya quyidagilardan birini qo'llab-quvvatlaydi: useFeature(1) useFeature(ref(1)) useFeature(() => 1)
toRefs()
Reaktiv ob'ektni har bir xususiyati original ob'ektning tegishli xususiyatiga ishora qiluvchi ref bo'lgan oddiy ob'ektga konvertatsiya qiladi. Har bir alohida ref toRef() yordamida yaratiladi.
Turi
tsfunction toRefs<T extends object>( object: T ): { [K in keyof T]: ToRef<T[K]> } type ToRef = T extends Ref ? T : Ref<T>Misol
jsconst state = reactive({ foo: 1, bar: 2 }) const stateAsRefs = toRefs(state) /* stateAsRefs turi: { foo: Ref<number>, bar: Ref<number> } */ // ref va original xususiyat "bog'langan" state.foo++ console.log(stateAsRefs.foo.value) // 2 stateAsRefs.foo.value++ console.log(state.foo) // 3toRefskompozitsiya funksiyasidan reaktiv ob'ektni qaytarishda foydali, shunda iste'mol qiluvchi komponent reaktivlikni yo'qotmasdan qaytarilgan ob'ektni destrukturalizatsiya qilishi / tarqatishi mumkin:jsfunction useFeatureX() { const state = reactive({ foo: 1, bar: 2 }) // ...state ustida operatsiyalar // qaytarishda ref'larga konvertatsiya qilish return toRefs(state) } // reaktivlikni yo'qotmasdan destrukturalizatsiya qilish mumkin const { foo, bar } = useFeatureX()toRefsfaqat chaqiruv vaqtida manba ob'ektida sanab o'tilishi mumkin bo'lgan xususiyatlar uchun ref'lar yaratadi. Hozirda mavjud bo'lmasligi mumkin bo'lgan xususiyat uchun ref yaratish uchun o'rnigatoRefdan foydalaning.
isProxy()
Ob'ekt reactive(), readonly(), shallowReactive() yoki shallowReadonly() tomonidan yaratilgan proxy ekanligini tekshiradi.
Turi
tsfunction isProxy(value: any): boolean
isReactive()
Ob'ekt reactive() yoki shallowReactive() tomonidan yaratilgan proxy ekanligini tekshiradi.
Turi
tsfunction isReactive(value: unknown): boolean
isReadonly()
Uzatilgan qiymat faqat o'qish uchun ob'ekt ekanligini tekshiradi. Faqat o'qish uchun ob'ektning xususiyatlari o'zgartirilishi mumkin, lekin ular uzatilgan ob'ekt orqali to'g'ridan-to'g'ri tayinlanishi mumkin emas.
readonly() va shallowReadonly() tomonidan yaratilgan proxy'lar ham faqat o'qish uchun hisoblanadi, shuningdek set funksiyasiga ega bo'lmagan computed() ref'i ham.
Turi
tsfunction isReadonly(value: unknown): boolean