上下文代码是:<script setup> import { reactive,ref } from "vue"; // import { FormRules } from "element-plus"; // const formSize = ref('default') const ruleFormRef = ref(null); const loginform = reactive ({ username:'', userpwd:'' }) // const submitForm = () => { // console.log('Submit!'); // } const rules = reactive({ username:[ { required: true, message: '请输入正确的用户名', trigger: 'blur' }, { min: 3, max: 20, message: '请输入3-20个字节', trigger: 'blur' }, ], userpwd:[ { required: true, message: '请输入正确的密码', trigger: 'blur'}, { min: 3, max: 20, message: '密码需要3~20个字符', trigger: 'blur'}, ] }) const submitForm = async () => { if (!ruleFormRef) return; ruleFormRef.value.validate((valid) => { if (valid) { console.log("submit!"); } else { return false; } }); } </script>
时间: 2024-01-16 13:03:49 浏览: 66
根据你提供的代码,`ruleFormRef` 是一个 ref 对象,初始值为 null。在 `submitForm` 方法中,你尝试访问 `ruleFormRef.value`,但是由于 `ruleFormRef` 的初始值为 null,所以这里会抛出 TypeError 异常。
解决这个问题的方法是在访问 `ruleFormRef.value` 之前,先对 `ruleFormRef` 进行判空处理。你可以使用条件语句或者可选链语法来实现。以下是两种可能的解决方案:
1. 使用条件语句:
```js
const submitForm = async () => {
if (!ruleFormRef) return;
if (ruleFormRef.value) {
ruleFormRef.value.validate((valid) => {
if (valid) {
console.log("submit!");
} else {
return false;
}
});
}
};
```
2. 使用可选链语法:
```js
const submitForm = async () => {
if (ruleFormRef?.value) {
ruleFormRef.value.validate((valid) => {
if (valid) {
console.log("submit!");
} else {
return false;
}
});
}
};
```
使用可选链语法可以更加简洁,但是需要注意的是它需要使用到 ES2020 的新特性,如果你的浏览器或者 Node.js 版本过低可能会不支持。
阅读全文