ちょい足しVue.jsでバリデーションフォームを実装する方法

こんにちは!このブログ記事では、Vue.jsを使用してバリデーションフォームを実装する方法についてご紹介します。

Vue.jsは、直感的なデータバインディングとコンポーネントベースのアーキテクチャを提供する人気のあるJavaScriptフレームワークです。

この記事では、静的なHTMLのフォームにちょっとした手を加えるだけで、簡単にバリデーション機能を追加する方法をご紹介します!!
いわゆるICSさんでいう*ちょい足しVue.jsですね🔥

さて本題のコードですが、以下になります。

index.html

        <form>
          <div class="mb-5">
            <label
              class="mb-3 block text-base font-medium text-[#07074D]"
              for="name"
              >名前</label
            >
            <input
              type="text"
              class="w-full rounded-md border border-[#e0e0e0] bg-white py-3 px-6 text-base font-medium text-[#6B7280] outline-none focus:border-[#6A64F1] focus:shadow-md"
              id="name"
              required
              v-model="name"
              @focus="nameValidationVisible = false"
              @blur="nameValidationVisible = !name"
            />
            <Transition name="fade">
              <div
                class="bg-red-400 text-white p-3 mt-3"
                v-show="!name && nameValidationVisible"
              >
                名前を入力してください
              </div>
            </Transition>
          </div>
          //~~~~~~省略
          <button
            type="button"
            class="disabled:bg-slate-300 hover:shadow-form rounded-md bg-[#6A64F1] py-3 px-8 text-base font-semibold text-white outline-none"
            @click="validateForm"
            :disabled="isButtonDisabled"
          >
            送信
          </button>
        </form>


main.js

import { createApp, ref, computed } from "https://unpkg.com/vue@3.2.4/dist/vue.esm-browser.prod.js";
const app = createApp({
  setup() {
    const name = ref("");
    const age = ref("");
    const email = ref("");
    const nameValidationVisible = ref(false);
    const ageValidationVisible = ref(false);
    const emailValidationVisible = ref(false);


    const validateForm = () => {
      if (!name.value) {
        nameValidationVisible.value = true;
        return;
      }
     // ~~~~~~省略
    };


    const isButtonDisabled = computed(() => {
      return !name.value; //~~~~~~省略
    });


    return {
      name,
      isButtonDisabled,
      validateForm,
      nameValidationVisible,
       //~~~~~~省略
    };
  },
});
app.mount("#app");


URL:https://contact-form-with-a-little-vue.netlify.app/

このように状態管理はVue.jsが比較的楽に行ってくれるので、Vanillaで実装するよりも工数が少なくて良いですね。
こういうバリデーションは実務で行うことは少ないんですが、静的サイトだったり自作が必要なケースも多々あるので積極的に使っていこうかなと思いました!

Vue.jsを使用すると、状態管理が比較的楽に行ってくれるので、バリデーションの実装がVanilla JavaScriptに比べて工数が少なくて良いですよね!

実務ではあまり行う機会は少ないかもしれませんが、静的なサイトや自作のプロジェクトでは、このようなバリデーションが必要になることもあるかと思いますので、ぜひ参考にしてみてください!

参考にさせていただいた記事
*ちょい足しVue.js (https://ics.media/entry/210908/)