useDebouncedRefHistory
useRefHistory 的简写形式,带有防抖过滤器。
Demo
<script setup lang="ts">
import { formatDate, useCounter, useDebouncedRefHistory } from '@vueuse/core'
import { shallowRef } from 'vue'
function format(ts: number) {
return formatDate(new Date(ts), 'YYYY-MM-DD HH:mm:ss')
}
const delay = shallowRef(1000)
const { count, inc, dec } = useCounter()
const { history, undo, redo, canUndo, canRedo } = useDebouncedRefHistory(
count,
{ capacity: 10, debounce: delay },
)
</script>
<template>
<div>Count: {{ count }}</div>
<button @click="inc()">
Increment
</button>
<button @click="dec()">
Decrement
</button>
<span class="ml-2">/</span>
<button :disabled="!canUndo" @click="undo()">
Undo
</button>
<button :disabled="!canRedo" @click="redo()">
Redo
</button>
<br>
<span>Delay (in ms):</span>
<input v-model="delay" type="number">
<br>
<br>
<note>History (limited to 10 records for demo)</note>
<div class="code-block mt-4">
<div v-for="i in history" :key="i.timestamp">
<span class="opacity-50 mr-2 font-mono">{{ format(i.timestamp) }}</span>
<span class="font-mono">{ value: {{ i.snapshot }} }</span>
</div>
</div>
</template>
使用
当计数器(counter)的值开始改变后,此函数会在 1000 毫秒 时为你的计数器 拍摄一个快照(即,记录)。当检测到计数器数值开始改变时,会触发一个定时器,等待 1000 毫秒后自动记录下此刻计数器的值。
import { useDebouncedRefHistory } from '@vueuse/core'
import { shallowRef } from 'vue'
const counter = shallowRef(0)
const { history, undo, redo } = useDebouncedRefHistory(counter, { deep: true, debounce: 1000 })
类型声明
/**
* [useRefHistory](https://vueuse.org/useRefHistory) 的简写形式,带防抖 (debounce) 过滤器。
*
* @see https://vueuse.org/useDebouncedRefHistory
* @param source
* @param options
*/
export declare function useDebouncedRefHistory<Raw, Serialized = Raw>(
source: Ref<Raw>,
options?: Omit<UseRefHistoryOptions<Raw, Serialized>, "eventFilter"> & {
debounce?: MaybeRefOrGetter<number>
},
): UseRefHistoryReturn<Raw, Serialized>