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

相关文章

前端下载文件时如何后端返回的文件流一些常见方法

《前端下载文件时如何后端返回的文件流一些常见方法》:本文主要介绍前端下载文件时如何后端返回的文件流一些常见方法,包括使用Blob和URL.createObjectURL创建下载链接,以及处理带有C... 目录1. 使用 Blob 和 URL.createObjectURL 创建下载链接例子:使用 Blob

Vuex Actions多参数传递的解决方案

《VuexActions多参数传递的解决方案》在Vuex中,actions的设计默认只支持单个参数传递,这有时会限制我们的使用场景,下面我将详细介绍几种处理多参数传递的解决方案,从基础到高级,... 目录一、对象封装法(推荐)二、参数解构法三、柯里化函数法四、Payload 工厂函数五、TypeScript

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

解决SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'

《解决SpringBoot启动报错:Failedtoloadpropertysourcefromlocationclasspath:/application.yml问题》这篇文章主要介绍... 目录在启动SpringBoot项目时报如下错误原因可能是1.yml中语法错误2.yml文件格式是GBK总结在启动S

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Pydantic中Optional 和Union类型的使用

《Pydantic中Optional和Union类型的使用》本文主要介绍了Pydantic中Optional和Union类型的使用,这两者在处理可选字段和多类型字段时尤为重要,文中通过示例代码介绍的... 目录简介Optional 类型Union 类型Optional 和 Union 的组合总结简介Pyd

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA