新聞中心
本節(jié)例子中代碼使用的單文件組件語法
創(chuàng)新互聯(lián)建站長期為近千家客戶提供的網(wǎng)站建設服務,團隊從業(yè)經(jīng)驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為昭陽企業(yè)提供專業(yè)的成都網(wǎng)站設計、網(wǎng)站建設,昭陽網(wǎng)站改版等技術服務。擁有十多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
#computed
使用 getter 函數(shù),并為從 getter 返回的值返回一個不變的響應式 ref 對象。
const count = ref(1)
const plusOne = computed(() => count.value + 1)
console.log(plusOne.value) // 2
plusOne.value++ // error 或者,它可以使用具有 get 和 set 函數(shù)的對象來創(chuàng)建可寫的 ref 對象。
const count = ref(1)
const plusOne = computed({
get: () => count.value + 1,
set: val => {
count.value = val - 1
}
})
plusOne.value = 1
console.log(count.value) // 0類型聲明:
// read-only
function computed(getter: () => T): Readonly>>
// writable
function computed(options: { get: () => T; set: (value: T) => void }): Ref
#watchEffect
在響應式地跟蹤其依賴項時立即運行一個函數(shù),并在更改依賴項時重新運行它。
const count = ref(0)
watchEffect(() => console.log(count.value))
// -> logs 0
setTimeout(() => {
count.value++
// -> logs 1
}, 100)類型聲明:
function watchEffect(
effect: (onInvalidate: InvalidateCbRegistrator) => void,
options?: WatchEffectOptions
): StopHandle
interface WatchEffectOptions {
flush?: 'pre' | 'post' | 'sync' // default: 'pre'
onTrack?: (event: DebuggerEvent) => void
onTrigger?: (event: DebuggerEvent) => void
}
interface DebuggerEvent {
effect: ReactiveEffect
target: any
type: OperationTypes
key: string | symbol | undefined
}
type InvalidateCbRegistrator = (invalidate: () => void) => void
type StopHandle = () => void 參考:watchEffect 指南
#watch
watch API 與選項式 API this.$watch (以及相應的 watch 選項) 完全等效。watch 需要偵聽特定的 data 源,并在單獨的回調(diào)函數(shù)中副作用。默認情況下,它也是惰性的——即,回調(diào)是僅在偵聽源發(fā)生更改時調(diào)用。
- 與 watchEffect 比較,
watch允許我們:- 惰性地執(zhí)行副作用;
- 更具體地說明應觸發(fā)偵聽器重新運行的狀態(tài);
- 訪問偵聽狀態(tài)的先前值和當前值。
#偵聽一個單一源
偵聽器 data 源可以是返回值的 getter 函數(shù),也可以是 ref:
// 偵聽一個getter
const state = reactive({ count: 0 })
watch(
() => state.count,
(count, prevCount) => {
/* ... */
}
)
// 直接偵聽一個ref
const count = ref(0)
watch(count, (count, prevCount) => {
/* ... */
})
#偵聽多個源
偵聽器還可以使用數(shù)組同時偵聽多個源:
watch([fooRef, barRef], ([foo, bar], [prevFoo, prevBar]) => {
/* ... */
})
#與 watchEffect 共享行為
watch 與 watchEffect 在手動停止,副作用無效 (將 onInvalidate 作為第三個參數(shù)傳遞給回調(diào)),flush timing 和 debugging 有共享行為。
類型聲明:
// 偵聽單一源
function watch(
source: WatcherSource,
callback: (
value: T,
oldValue: T,
onInvalidate: InvalidateCbRegistrator
) => void,
options?: WatchOptions
): StopHandle
// 偵聽多個源
function watch[]>(
sources: T
callback: (
values: MapSources,
oldValues: MapSources,
onInvalidate: InvalidateCbRegistrator
) => void,
options? : WatchOptions
): StopHandle
type WatcherSource = Ref | (() => T)
type MapSources = {
[K in keyof T]: T[K] extends WatcherSource ? V : never
}
// 參見 `watchEffect` 類型聲明共享選項
interface WatchOptions extends WatchEffectOptions {
immediate?: boolean // default: false
deep?: boolean
} 參考:watch 指南
網(wǎng)頁標題:創(chuàng)新互聯(lián)VUE3教程:Vue3.0響應性APIComputed與watch
新聞來源:http://www.dlmjj.cn/article/djghhhp.html


咨詢
建站咨詢

