新聞中心
本節(jié)例子中代碼使用的單文件組件語法
成都創(chuàng)新互聯(lián)公司成立于2013年,我們提供高端重慶網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)站定制、全網(wǎng)營銷推廣、小程序開發(fā)、微信公眾號(hào)開發(fā)、網(wǎng)站推廣服務(wù),提供專業(yè)營銷思路、內(nèi)容策劃、視覺設(shè)計(jì)、程序開發(fā)來完成項(xiàng)目落地,為水泥攪拌車企業(yè)提供源源不斷的流量和訂單咨詢。
#ref
接受一個(gè)內(nèi)部值并返回一個(gè)響應(yīng)式且可變的 ref 對象。ref 對象具有指向內(nèi)部值的單個(gè) property .value。
示例:
const count = ref(0)
console.log(count.value) // 0
count.value++
console.log(count.value) // 1如果將對象分配為 ref 值,則可以通過 reactive 方法使該對象具有高度的響應(yīng)式。
類型聲明:
interface Ref {
value: T
}
function ref(value: T): Ref 有時(shí)我們可能需要為 ref 的內(nèi)部值指定復(fù)雜類型。我們可以通過在調(diào)用 ref 來覆蓋默認(rèn)推斷時(shí)傳遞一個(gè)泛型參數(shù)來簡潔地做到這一點(diǎn):
const foo = ref('foo') // foo's type: Ref
foo.value = 123 // ok! 如果泛型的類型未知,建議將 ref 轉(zhuǎn)換為 Ref:
function useState(initial: State) {
const state = ref(initial) as Ref // state.value -> State extends string
return state
}
#unref
如果參數(shù)為 ref,則返回內(nèi)部值,否則返回參數(shù)本身。這是 val = isRef(val) ? val.value : val。
function useFoo(x: number | Ref) {
const unwrapped = unref(x) // unwrapped 確保現(xiàn)在是數(shù)字類型
}
#toRef
可以用來為源響應(yīng)式對象上的 property 性創(chuàng)建一個(gè) ref。然后可以將 ref 傳遞出去,從而保持對其源 property 的響應(yīng)式連接。
const state = reactive({
foo: 1,
bar: 2
})
const fooRef = toRef(state, 'foo')
fooRef.value++
console.log(state.foo) // 2
state.foo++
console.log(fooRef.value) // 3 當(dāng)您要將 prop 的 ref 傳遞給復(fù)合函數(shù)時(shí),toRef 很有用:
export default {
setup(props) {
useSomeFeature(toRef(props, 'foo'))
}
}
#toRefs
將響應(yīng)式對象轉(zhuǎn)換為普通對象,其中結(jié)果對象的每個(gè) property 都是指向原始對象相應(yīng) property 的ref。
const state = reactive({
foo: 1,
bar: 2
})
const stateAsRefs = toRefs(state)
/*
Type of stateAsRefs:
{
foo: Ref,
bar: Ref
}
*/
// ref 和 原始property “鏈接”
state.foo++
console.log(stateAsRefs.foo.value) // 2
stateAsRefs.foo.value++
console.log(state.foo) // 3 當(dāng)從合成函數(shù)返回響應(yīng)式對象時(shí),toRefs 非常有用,這樣消費(fèi)組件就可以在不丟失響應(yīng)性的情況下對返回的對象進(jìn)行分解/擴(kuò)散:
function useFeatureX() {
const state = reactive({
foo: 1,
bar: 2
})
// 邏輯運(yùn)行狀態(tài)
// 返回時(shí)轉(zhuǎn)換為ref
return toRefs(state)
}
export default {
setup() {
// 可以在不失去響應(yīng)性的情況下破壞結(jié)構(gòu)
const { foo, bar } = useFeatureX()
return {
foo,
bar
}
}
}
#isRef
檢查值是否為ref對象。
#customRef
創(chuàng)建一個(gè)自定義的 ref,并對其依賴項(xiàng)跟蹤和更新觸發(fā)進(jìn)行顯式控制。它需要一個(gè)工廠函數(shù),該函數(shù)接收 track 和 trigger 函數(shù)作為參數(shù),并應(yīng)返回一個(gè)帶有 get 和 set 的對象。
- 使用
v-model使用自定義 ref 實(shí)現(xiàn)debounce的示例:
function useDebouncedRef(value, delay = 200) {
let timeout
return customRef((track, trigger) => {
return {
get() {
track()
return value
},
set(newValue) {
clearTimeout(timeout)
timeout = setTimeout(() => {
value = newValue
trigger()
}, delay)
}
}
})
}
export default {
setup() {
return {
text: useDebouncedRef('hello')
}
}
}Typing:
function customRef(factory: CustomRefFactory): Ref
type CustomRefFactory = (
track: () => void,
trigger: () => void
) => {
get: () => T
set: (value: T) => void
}
#shallowRef
創(chuàng)建一個(gè) ref,它跟蹤自己的 .value 更改,但不會(huì)使其值成為響應(yīng)式的。
const foo = shallowRef({})
// 改變 ref 的值是響應(yīng)式的
foo.value = {}
// 但是這個(gè)值不會(huì)被轉(zhuǎn)換。
isReactive(foo.value) // false 參考:正在將獨(dú)立的響應(yīng)式值創(chuàng)建為 refs
#triggerRef
手動(dòng)執(zhí)行與 shallowRef](#shallowref) 關(guān)聯(lián)的任何效果。
const shallow = shallowRef({
greet: 'Hello, world'
})
// 第一次運(yùn)行時(shí)記錄一次 "Hello, world"
watchEffect(() => {
console.log(shallow.value.greet)
})
// 這不會(huì)觸發(fā)作用,因?yàn)?ref 很淺層
shallow.value.greet = 'Hello, universe'
// 記錄 "Hello, universe"
triggerRef(shallow)參考計(jì)算和偵聽 - watchEffect
新聞名稱:創(chuàng)新互聯(lián)VUE3教程:Vue3.0響應(yīng)性APIRefs
瀏覽地址:http://m.5511xx.com/article/cdohdoj.html


咨詢
建站咨詢

