Vue3-ts报错:类型“never”上不存在属性“resetFields“

本文主要是介绍Vue3-ts报错:类型“never”上不存在属性“resetFields“,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Vue3-ts报错:类型“never”上不存在属性“resetFields“

在 Vue3 项目中使用表单的时候,通常有验证环节,在 script 中:

const showModal = ref(false);
const isRegistering = ref(false); // 新增状态
const formRef = ref(null);
const formState = ref({username: '',password: '',repeatPassword: '' // 仅在注册时使用
});const handleSubmit = () => {if (formRef.value) {formRef.value.validate((errors: any) => {if (!errors) {console.log('提交的数据', formState.value);// 在这里添加提交表单的逻辑}});} else {console.error('表单数据不存在');}
};const handleReset = () => {if (formRef.value) {formRef.value.resetFields();} else {console.error('表单数据不存在');}
};

此时会出现报错:

类型“never”上不存在属性“resetFields“

问题原因

const formRef = ref(null);

此时formRef.value 的类型是 never ,要避免这个错误,将 ref 的初始值改为空即可。

解决方式

修改formRef

const formRef = ref();

完整代码(简单的注册登录组件)

<template><div class="container"><n-modal v-model:show="showModal" title="登录/注册"><div class="form"><p>欢迎使用Promptate</p><n-form ref="formRef" :model="formState" :rules="rules"><n-form-item label="用户名" path="username"><n-input v-model:value="formState.username" placeholder="请输入用户名" /></n-form-item><n-form-item label="密码" path="password"><n-input v-model:value="formState.password" placeholder="请输入密码" type="password" /></n-form-item><!-- 注册时添加重复密码字段 --><n-form-item v-if="isRegistering" label="重复密码" path="repeatPassword"><n-input v-model:value="formState.repeatPassword" placeholder="请再次输入密码" type="password" /></n-form-item><div class="btnGroup"><n-button @click="handleSubmit">{{ isRegistering ? '注册' : '登录' }}</n-button><n-button @click="handleReset">重置</n-button></div></n-form><div class="toggle-action" @click="toggleForm">{{ isRegistering ? '已有账号?登录' : '没有账号?注册' }}</div></div></n-modal><n-button @click="showModal = true" class="btn">登录/注册</n-button></div>
</template><script setup lang="ts">
import { ref } from 'vue';
const showModal = ref(false);
const isRegistering = ref(false); // 新增状态
const formRef = ref();
const formState = ref({username: '',password: '',repeatPassword: '' // 仅在注册时使用
});// 根据当前模式(登录/注册)调整验证规则
const rules = ref({username: {required: true,message: '请输入用户名',trigger: 'blur'},password: {required: true,message: '请输入密码',trigger: 'blur'},repeatPassword: isRegistering.value ? {required: true,message: '请再次输入密码',trigger: 'blur'} : {}
});const handleSubmit = () => {if (formRef.value) {formRef.value.validate((errors: any) => {if (!errors) {console.log('提交的数据', formState.value);// 在这里添加提交表单的逻辑}});} else {console.error('表单数据不存在');}
};const handleReset = () => {if (formRef.value) {formRef.value.resetFields();} else {console.error('表单数据不存在');}
};const toggleForm = () => {isRegistering.value = !isRegistering.value;
};
</script><style scoped lang="scss">
.btn {margin-left: 10px;
}.container {display: flex;align-items: center;text-align: center;
}p {text-align: center;font-size: 20px;
}.form {background-color: white;width: 400px;padding: 20px 50px;border-radius: 5px;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); 
}.btnGroup {display: flex;justify-content: center;gap: 16px; /* 这会在按钮之间创建16px的间隙 */
}.toggle-action {margin-top: 20px;text-align: center;color: #409eff;cursor: pointer;
}
</style>

这篇关于Vue3-ts报错:类型“never”上不存在属性“resetFields“的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/609930

相关文章

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”问题

《VMWare报错“指定的文件不是虚拟磁盘“或“Thefilespecifiedisnotavirtualdisk”问题》文章描述了如何修复VMware虚拟机中出现的“指定的文件不是虚拟... 目录VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virt

element-ui下拉输入框+resetFields无法回显的问题解决

《element-ui下拉输入框+resetFields无法回显的问题解决》本文主要介绍了在使用ElementUI的下拉输入框时,点击重置按钮后输入框无法回显数据的问题,具有一定的参考价值,感兴趣的... 目录描述原因问题重现解决方案方法一方法二总结描述第一次进入页面,不做任何操作,点击重置按钮,再进行下

python 字典d[k]中key不存在的解决方案

《python字典d[k]中key不存在的解决方案》本文主要介绍了在Python中处理字典键不存在时获取默认值的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录defaultdict:处理找不到的键的一个选择特殊方法__missing__有时候为了方便起见,

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT