资金使用表单新增时资金名称下拉框未清空,利用 Vue 的 key 特性,每次新增时强制销毁并重建 CapitalUseForm 组件,从根本上清除所有内部状态
问题描述问题总结资金使用表单新增时资金名称下拉框未清空问题描述在资金使用页面点击【新增】按钮打开表单对话框时资金名称下拉框中会残留上一次选中值或其他非空值而其他输入框如申请原因、收款单位等均正常重置为空。根本原因组件复用导致状态残留CapitalUseForm组件在对话框关闭后并未销毁再次新增时被复用内部状态如el-select的选中值未完全重置。异步数据加载触发自动选中可用资金列表通过availableCapitalStore异步加载。当组件复用时el-select在选项列表从空变为有数据的过程中Element Plus 内部会尝试匹配当前值初始为null部分版本会自动选中第一个选项从而覆盖了手动重置的null。尝试过但无效的方案移除el-select的default-first-option属性手动重置actualUseTotal等独立字段添加watch保护allocateDetailId强制改回null使用计算属性安全绑定避免 TypeScript 类型错误监听可用资金列表变化并重置选中值这些方案要么未能彻底阻止自动选中要么因组件复用导致其他字段重置失效最终效果不理想。最终有效方案强制重建表单组件利用 Vue 的key特性每次新增时强制销毁并重建CapitalUseForm组件从根本上清除所有内部状态。核心代码父组件CapitalUsevuetemplate WorkflowMainDialog template #default CapitalUseForm refcapitalUseFormRef :key${store.currentCapitalUse?.id ?? create}_${resetKey} :datastore.currentCapitalUse modifiedhandleModified / /template /WorkflowMainDialog /template script setup const resetKey ref(0); const handleAdd async () { resetKey.value; // 改变 key强制重建表单 store.setCurrentCapitalUse(null); capitalUseTableRef.value?.setCurrentRow(); await nextTick(); workflowMainDialogRef.value?.openDialog(); }; /script子组件CapitalUseForm保留原有的数据重置watch无需额外保护逻辑tswatch( () props.data, (newData) { if (!newData) { formData.value { allocateDetailId: null, applyReason: , ... }; actualUseTotal.value null; // 触发可用资金加载若需要 if (availableCapitalStore.availableAllocateDetails.length 0) { availableCapitalStore.getAvailableAllocateDetails(); } } else { formData.value { ...newData }; } }, { immediate: true, deep: true } );方案优势彻底清除残留组件重建后所有内部状态包括el-select的选中值均为全新。代码简洁仅需在父组件增加一个resetKey变量和模板:key绑定子组件无需复杂修改。性能友好仅新增时重建组件编辑/查看模式复用组件开销极小。与异步数据解耦无论异步数据何时加载完成新组件都会正常渲染且不会自动选中。经验总结组件复用需谨慎当组件内部状态与异步数据耦合时复用可能导致状态残留。通过动态key强制重建是简单可靠的解决方案。el-select自动选中的本质当选项列表从空变为非空时部分 UI 库会尝试将当前值匹配到第一个选项这是设计行为应通过控制渲染时机如数据就绪后再渲染或组件重建来规避。简化优于叠加多次尝试添加保护逻辑后最终发现最简洁的方案强制重建反而最稳定。在复杂问题面前有时“重置一切”比“修补状态”更高效。通过上述方案资金名称下拉框在新增时已能正确清空且不影响其他字段的正常重置。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2439522.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!