【Vue3】[vuelidate]Uncaught TypeError: Cannot read properties of undefined (reading ‘name’)のエラー対処

この記事は約3分で読めます。

以下、作業用メモです。

Vuelidateを使って、バリデーション機能を実装した際に、タイトルのようなエラーに遭遇しました。ブラウザ表示されず、コンソールにエラー表示されていました。

具体的にエラーが出ている箇所は、以下の部分。

エラーメッセージから判断すると、v$.form.nameundefinedであるという問題が発生。
これは、v$オブジェクトまたはそのformプロパティ、あるいはnameプロパティが定義されていないことを示している。

Vuelidateのバージョン2では、バリデーションルールを適用するための新しい構文が導入されています。
それにより、v$オブジェクトの構造が変わり、v$.form.nameの代わりにv$.name.$errorのように直接フィールドにアクセスすることが可能になったそうです。そのため、v$.name.$error のようにして、直接フィールドにアクセスするように修正すれば、問題なく表示されました。

【その他メモ】

・メッセージではなくバリデーションエラーが発生しているかどうかは$v.value.$errorで確認することができる。

・$validate関数はバリデーションの結果をboolenで戻しますがPromiseで戻されるため結果を取得するためにはasync, await関数を利用する必要がある。

・エラーメッセージ表示時の以下のバイディングの意味について。

「form-controlクラスを常に適用し、nameフィールドがバリデーションエラーを持っている場合にはerrorクラスも適用する」という意味になる。これにより、バリデーションエラーの有無に応じて要素のスタイルを動的に変更することが可能になる。

【参考サイト】

以下のサイトはいろいろなバリデーションの実例も載ってて参考になりました。

☆☆☆エラーメッセージを表示する方法も解説してくれている
☆☆☆

タイトルとURLをコピーしました