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

相关文章

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务

使用Python和Tkinter实现html标签去除工具

《使用Python和Tkinter实现html标签去除工具》本文介绍用Python和Tkinter开发的HTML标签去除工具,支持去除HTML标签、转义实体并输出纯文本,提供图形界面操作及复制功能,需... 目录html 标签去除工具功能介绍创作过程1. 技术选型2. 核心实现逻辑3. 用户体验增强如何运行

Spring Cache注解@Cacheable的九个属性详解

《SpringCache注解@Cacheable的九个属性详解》在@Cacheable注解的使用中,共有9个属性供我们来使用,这9个属性分别是:value、cacheNames、key、key... 目录1.value/cacheNames 属性2.key属性3.keyGeneratjavascriptor

CSS 样式表的四种应用方式及css注释的应用小结

《CSS样式表的四种应用方式及css注释的应用小结》:本文主要介绍了CSS样式表的四种应用方式及css注释的应用小结,本文通过实例代码给大家介绍的非常详细,详细内容请阅读本文,希望能对你有所帮助... 一、外部 css(推荐方式)定义:将 CSS 代码保存为独立的 .css 文件,通过 <link> 标签

Spring Boot 事务详解(事务传播行为、事务属性)

《SpringBoot事务详解(事务传播行为、事务属性)》SpringBoot提供了强大的事务管理功能,通过@Transactional注解可以方便地配置事务的传播行为和属性,本文将详细介绍Spr... 目录Spring Boot 事务详解引言声明式事务管理示例编程式事务管理示例事务传播行为1. REQUI

解决Java异常报错:java.nio.channels.UnresolvedAddressException问题

《解决Java异常报错:java.nio.channels.UnresolvedAddressException问题》:本文主要介绍解决Java异常报错:java.nio.channels.Unr... 目录异常含义可能出现的场景1. 错误的 IP 地址格式2. DNS 解析失败3. 未初始化的地址对象解决

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue

Vue中插槽slot的使用示例详解

《Vue中插槽slot的使用示例详解》:本文主要介绍Vue中插槽slot的使用示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、插槽是什么二、插槽分类2.1 匿名插槽2.2 具名插槽2.3 作用域插槽三、插槽的基本使用3.1 匿名插槽