バリフォー

Web


Warning: Attempt to read property "site_name" on bool in /home/goodhokkaido/sixwheel.net/public_html/muguruma/wp/wp-content/themes/frame/functions.php on line 208

Warning: Attempt to read property "title" on bool in /home/goodhokkaido/sixwheel.net/public_html/muguruma/wp/wp-content/themes/frame/functions.php on line 211

Warning: Attempt to read property "description" on bool in /home/goodhokkaido/sixwheel.net/public_html/muguruma/wp/wp-content/themes/frame/functions.php on line 217

Warning: Attempt to read property "site_name" on bool in /home/goodhokkaido/sixwheel.net/public_html/muguruma/wp/wp-content/themes/frame/functions.php on line 208

Warning: Attempt to read property "title" on bool in /home/goodhokkaido/sixwheel.net/public_html/muguruma/wp/wp-content/themes/frame/functions.php on line 211

Warning: Attempt to read property "description" on bool in /home/goodhokkaido/sixwheel.net/public_html/muguruma/wp/wp-content/themes/frame/functions.php on line 217

Nuxt3でvuetify3とVeeValidate4を実装するのに手こずる

Nuxt3で、vuetify3を使ってフォームを作成し、VeeValidate4でバリデーションしたけど、なかなかうまくいかず、調べたのでメモ。単純にお問い合わせフォームを設置しようと、作り始めましたが、ちゃんと動きません。試行錯誤した結果、ようやくなんとかなりました。※確認画面やサンクス画面はvueifyで用意されていなさそうなので、自分で作ってる最中。まだ完成しておらず、ここには掲載していません。ボタンを押したら、横にスクロールして、フォームの記入画面と確認画面とサンクス画面が入れ替わる予定です。

Version
Nuxt: 3.9.1
vuetify: 3.4.10
vee-validate: 4.12.4
yup: 1.3.3

お問い合わせフォームを作る

名前、メールアドレス、問い合わせ内容、居住地と送信ボタンだけのとても簡易なフォームです。vuetify3とVeeValidateの組み合わせは下記を参考にしました。なんで、.value.valueになっているだと修正したりながら書いていましたが、結果的に下記そのままの方がちゃんと動くことを確認。

Form component — Vuetify
The form component provides a wrapper that makes it easy to …

VeeValidateの実装は下記を参考にしています。

Vue3でフォームバリデーションのVee-Validate 4の基礎を理解 | アールエフェクト
Vue.jsでフォームバリデーションを実装する場合にVeeValidateとVuelidateライブラリがよく利用されま…

あと、詰まったところがあって、その時はこちらを参考にしました。schema.fieldschatGPTが教えてくれたので、使っています。

メールアドレスを入力していると文字を入力する度にバリデーションエラーが表示されるので、送信ボタンを押すとバリデーションする形に変更。メールアドレスのみvalidateOnValueUpdate: falseの設定を加えることで希望どおりの動きに。vee-validate3のInteraction Modesに若干踊らされたのでした。

Custom inputs
Field-level and form-level validation and validation behavio…

できたのはこちら。submitはバリデーションとデータ登録と横に移動するためにあり、横に移動するのは未実装。移動先に、データを送信するボタンを設置する予定です。resetFormも送信後に、フォームがリセットされます。

import { useField, useForm } from 'vee-validate';
import { object, string } from 'yup';
import type { InquiryArray } from '~/types/jsonarray';
const fd = new FormData();

const schema = object({
  mainText: string().required('必須項目です。'),
  name: string().required('必須項目です。'),
  mail: string().required('必須項目です。').email('メールアドレスの形式ではありません。')
});
const { handleSubmit, resetForm } = useForm({
  validationScheme: schema
});

const mainText = useField('mainText', schema.fields.mainText);
const name = useField('name', schema.fields.name);
const mail = useField('mail', schema.fields.mail, {
  validateOnValueUpdate: false
});
const place = useField('place');

const submit = handleSubmit((values: InquiryArray) => {
  for (const key in values) {
    if (values[key] !== undefined) {
      fd.set(key, values[key] as string);
    }
  }

  // for (const value of fd.entries()) {
  //   console.log(value);
  // }
});

コメント