Как правильно реализовать валидацию во Vue3?

Валидация данных является важной частью любого веб-приложения, и в Vue.js 3 этот процесс стал еще более простым и гибким благодаря новому Composition API. В этом ответе я расскажу, как правильно реализовать валидацию во Vue.js 3.

1. Установите Vue.js 3:

   npm install vue@next

2. Создайте компонент, в котором будет происходить валидация данных. Для примера создадим компонент ValidationForm:

   <template>
     <form @submit="handleSubmit">
       <label>
         Username:
         <input v-model="username" />
         <span v-if="errors.username" class="error">{{ errors.username }}</span>
       </label>
   
       <label>
         Email:
         <input v-model="email" />
         <span v-if="errors.email" class="error">{{ errors.email }}</span>
       </label>
   
       <button type="submit">Submit</button>
     </form>
   </template>
   
   <script>
   import { ref } from 'vue';
   
   export default {
     setup() {
       const username = ref('');
       const email = ref('');
       const errors = ref({});
   
       const handleSubmit = () => {
         errors.value = {}; // сбрасываем ошибки перед валидацией
   
         if (!username.value) {
           errors.value.username = 'Username is required';
         }
   
         if (!email.value) {
           errors.value.email = 'Email is required';
         } else if (!isValidEmail(email.value)) {
           errors.value.email = 'Invalid email format';
         }
   
         // Если нет ошибок, отправляем данные на сервер
         if (Object.keys(errors.value).length === 0) {
           // ваш код для отправки данных на сервер
         }
       };
   
       return {
         username,
         email,
         errors,
         handleSubmit
       };
     }
   };
   
   function isValidEmail(email) {
     // ваша реализация валидации email
   }
   </script>

В этом компоненте мы используем реактивные переменные username, email и errors с помощью функции ref из Composition API. В функции handleSubmit мы проверяем, что поля username и email заполнены, и добавляем соответствующие ошибки в объект errors. Затем мы проверяем, есть ли ошибки до отправки данных на сервер. Если ошибок нет, можно выполнять код для отправки данных на сервер.

3. Стилизуйте компонент, чтобы отображать сообщения об ошибках. В примере выше мы использовали класс .error для вывода ошибок, но вы можете настроить стили по своему усмотрению.

   .error {
     color: red;
   }

4. Используйте компонент ValidationForm в вашем основном компоненте:

   <template>
     <div>
       <h1>My Awesome App</h1>
       <ValidationForm />
     </div>
   </template>
   
   <script>
   import ValidationForm from './ValidationForm.vue';
   
   export default {
     components: {
       ValidationForm
     }
   };
   </script>

Теперь у вас есть простая и эффективная валидация данных во Vue.js 3 с использованием Composition API. Вы можете использовать это как отправную точку и настраивать валидацию под свои потребности или добавлять дополнительные проверки.