You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue2使用Vuelidate调用this.$v.userData.lastName.$error触发栈溢出

解决Vue2中Vuelidate访问$error导致栈溢出的问题

问题原因

你当前使用的验证器依赖版本不匹配:Vue2对应的Vuelidate版本是v0.x,但你导入的@vuelidate/validators是为Vuelidate v2(适配Vue3)设计的,两者API结构不兼容,访问$error时会触发无限递归,最终导致栈溢出。

解决方案

1. 调整验证器导入路径

将验证器的导入来源改为Vuelidate v0.x自带的库:

<script>
import { validationMixin } from "vuelidate";
// 替换导入路径
import { required } from "vuelidate/lib/validators";

export default {
  mixins: [validationMixin],
  data() {
    return {
      userData: {
        lastName: "12312",
        name: "",
      },
    };
  },
  validations() {
    return {
      userData: {
        lastName: { required },
        name: { required },
      },
    };
  },

  methods: {
    consoleLog() {
      // 现在可正常访问$error
      console.log(this.$v.userData.lastName.$error);
    },
  },
};
</script>

<template>
  <div id="app">
    <button @click.prevent="consoleLog">Тест</button>
  </div>
</template>

2. 确认依赖版本

确保package.json中vuelidate为v0.x版本,示例:

{
  "dependencies": {
    "vuelidate": "^0.7.6",
    "vue": "^2.6.14"
  }
}

若之前安装了@vuelidate/validators,可卸载:

npm uninstall @vuelidate/validators
# 或 yarn remove @vuelidate/validators

原理说明

Vuelidate v0.x的验证器是简单的函数结构,而v2的@vuelidate/validators返回的是包含额外上下文的对象。当v0.x的validationMixin尝试解析这些对象时,会触发无限的属性遍历或递归调用,最终超出调用栈上限。

内容的提问来源于stack exchange,提问作者Danil Yahin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 14:02:11