Skip to content

Данные формы ​

В форме три «версии» данных и два набора ошибок. Здесь — что где лежит и как меняется по ходу заполнения. Все значения ниже — настоящий вывод tinyval-vue.

ts
const Signup = object({
  name: pipe(string(), trim(), minLength(2)),
  email: pipe(string(), email()),
  age: optional(pipe(coerce.number(), min(18))),
});

const form = useForm(Signup, { initial: { name: '', email: '', age: '' } });

values, data и changes ​

ПолеЧто внутриПримерДля чего
form.valuesТо, что ввёл пользователь, как есть{ name: ' Ivan ', email: 'ivan@mail.ru', age: '30' }v-model
form.dataПроверенные данные после схемы: trim, coerce, без лишних полей. undefined, пока есть ошибки{ name: 'Ivan', email: 'ivan@mail.ru', age: 30 }Предпросмотр, вычисления
данные в handleSubmitТо же, что form.data, в момент отправки{ name: 'Ivan', email: 'ivan@mail.ru', age: 30 }Отправка на сервер
form.changesТолько изменённые поля, как ввёл пользователь (из values){ email: 'petr@mail.ru' }PATCH — см. Редактирование

Тип values берётся из initial (в инпутах — строки), тип data — из схемы (age: number).

errors и allErrors ​

ПолеЧто внутри
form.allErrorsВсе текущие ошибки схемы и сервера — сразу, даже до того, как пользователь что-то ввёл
form.errorsТолько те, что пора показать: с полей, которые пользователь покинул, после отправки — все. Плюс ошибки сервера

Формат — как errors в tinyval: путь через точку → текст первой ошибки. Подробнее о путях и текстах — Результат проверки.

Как меняется состояние ​

Пользователь заполняет форму регистрации:

ШагerrorsallErrorsvaliddirtysubmittedsubmitCountsubmitSucceededdata
1. Форма открыта{}name, email: Requiredfalsefalsefalse0falseundefined
2. Ввёл в имя ' I'{}name: Must be at least 2 characters long, email: Requiredfalsetruefalse0falseundefined
3. Ушёл с поля имениname: Must be at least 2 characters longкак на шаге 2falsetruefalse0falseundefined
4. Нажал «Отправить»name, email — все ошибки видныкак на шаге 2falsetruetrue1falseundefined
5. Исправил, сервер ответил 422email: The email has already been taken.то жеfalsetruetrue2false{ name: 'Ivan', … }
6. Сменил email, отправил{}{}truefalsetrue3true{ name: 'Ivan', email: 'petr@mail.ru', age: 30 }

Что видно из таблицы:

  • Ошибки считаются сразу (allErrors на шаге 1), а показываются, когда пользователь ушёл с поля или нажал «Отправить».
  • Ошибка сервера попадает в errors и делает valid ложным, но data остаётся — данные-то прошли проверку схемы. Ошибка исчезнет, когда пользователь изменит это поле.
  • После успешной отправки dirty снова false, а changes пустой: текущие значения считаются сохранёнными.

Что приходит в handleSubmit ​

Только если форма прошла проверку, и только проверенные данные — после trim и coerce:

ts
// form.values: { name: ' Ivan ', email: 'petr@mail.ru', age: '30' }
const submit = form.handleSubmit((data) => {
  data; // { name: 'Ivan', email: 'petr@mail.ru', age: 30 }
});

Ошибки в onInvalid — видимые ошибки (form.errors) на момент отправки, то есть все.

Остальные поля ​

ПолеЗначение
touchedПоля, с которых уходили: { name: true }. Путь как в errors
validatingtrue, пока идёт асинхронная проверка
submittingtrue, пока выполняется обработчик handleSubmit
idОснова для id полей

Полный список — useForm.

См. также ​