packages/core/useFocus/index.md
Reactive utility to track or set the focus state of a DOM element. State changes to reflect whether the target element is the focused element. Setting reactive value from the outside will trigger focus and blur events for true and false values respectively.
import { useFocus } from '@vueuse/core'
const target = shallowRef()
const { focused } = useFocus(target)
watch(focused, (focused) => {
if (focused)
console.log('input element has been focused')
else console.log('input element has lost focus')
})
To focus the element on its first render one can provide the initialValue option as true. This will trigger a focus event on the target element.
import { useFocus } from '@vueuse/core'
const target = shallowRef()
const { focused } = useFocus(target, { initialValue: true })
Changes of the focused reactive ref will automatically trigger focus and blur events for true and false values respectively. You can utilize this behavior to focus the target element as a result of another action (e.g. when a button click as shown below).
<script setup lang="ts">
import { useFocus } from '@vueuse/core'
import { shallowRef } from 'vue'
const input = shallowRef()
const { focused } = useFocus(input)
</script>
<template>
<div>
<button type="button" @click="focused = true">
Click me to focus input below
</button>
<input ref="input" type="text">
</div>
</template>