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
isRef
tur 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>): T
Misol
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) // 3
Bu quyidagidan farq qilishini ta'kidlang:
jsconst fooRef = ref(state.foo)
Yuqoridagi ref
state.foo
bilan 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>
toRef
komponent 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 holatdaget
vaset
bilancomputed
ni ishlatishni ko'rib chiqishingiz mumkin. Batafsil ma'lumot uchun komponentlar bilanv-model
ishlatish qo'llanmasiga qarang.Ob'ekt xususiyati imzosini ishlatganda,
toRef()
manba xususiyati hozirda mavjud bo'lmasa ham ishlatilishi mumkin bo'lgan ref qaytaradi. ButoRefs
tomonidan 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)): T
Misol
jstoValue(1) // --> 1 toValue(ref(1)) // --> 1 toValue(() => 1) // --> 1
Kompozitsiyalarda 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) // 3
toRefs
kompozitsiya 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()
toRefs
faqat 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'rnigatoRef
dan 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