Back to Vueuse

watchThrottled

packages/shared/watchThrottled/index.md

14.3.01.6 KB
Original Source

watchThrottled

Throttled watch. The callback will be invoked at most once per specified duration.

Usage

Similar to watch, but offering extra options throttle, trailing, and leading which will be applied to the callback function.

ts
import { watchThrottled } from '@vueuse/core'

watchThrottled(
  source,
  () => { console.log('changed!') },
  { throttle: 500 },
)

Options

OptionTypeDefaultDescription
throttleMaybeRefOrGetter<number>0Throttle interval in ms (can be reactive)
trailingbooleantrueInvoke on the trailing edge
leadingbooleantrueInvoke on the leading edge

All standard watch options (deep, immediate, flush, etc.) are also supported.

Leading and Trailing

Control when the callback is invoked:

ts
import { watchThrottled } from '@vueuse/core'

// Only invoke at the start of each throttle period
watchThrottled(source, callback, {
  throttle: 500,
  leading: true,
  trailing: false,
})

// Only invoke at the end of each throttle period
watchThrottled(source, callback, {
  throttle: 500,
  leading: false,
  trailing: true,
})

How It Works

It's essentially a shorthand for the following code:

ts
import { throttleFilter, watchWithFilter } from '@vueuse/core'

watchWithFilter(
  source,
  () => { console.log('changed!') },
  {
    eventFilter: throttleFilter(500),
  },
)