Skip to content

useField ​

Одно поле формы — для своих компонентов полей. Даёт значение для v-model, ошибку и готовые атрибуты: name (нужен для фокуса на ошибке), id, aria-invalid, aria-describedby — экранные дикторы прочитают текст ошибки.

Сигнатура ​

ts
function useField<T>(path: MaybeRefOrGetter<string>): Field<T>
function useField<T>(form: Form, path: MaybeRefOrGetter<string>): Field<T>
ВозвращаетОписание
valueЗначение поля — для v-model
errorТекст ошибки, если её пора показать
touched, dirtyУходили ли с поля; отличается ли значение от начального
attrsname, id, aria-invalid, aria-describedby, onBlur — для v-bind на <input>
errorIdid для элемента с текстом ошибки
onBlurОтметить поле «тронутым»

path может быть ref или функцией — поле переключится на другой путь.

Без form форма берётся из контекста — от useForm или <TvForm> выше по дереву компонентов.

Пример ​

vue
<!-- TextField.vue -->
<script setup lang="ts">
import { useField } from 'tinyval-vue';

const props = defineProps<{ path: string; label: string }>();
const { value, error, attrs, errorId } = useField<string>(() => props.path); // the form comes from the parent
</script>

<template>
  <label :for="attrs.id">{{ label }}</label>
  <input v-model="value" v-bind="attrs" />
  <span v-if="error" :id="errorId" role="alert">{{ error }}</span>
</template>
vue
<form @submit="submit">
  <TextField path="name" label="Name" />
  <TextField path="email" label="Email" type="email" />
</form>

См. также ​