type="reset" 在 vue/react 中失效,因其仅重置 dom 属性(value/checked/selected),不更新组件状态;v-model 或 usestate 值保持不变,导致界面与真实状态脱节,如 checkbox 显示未勾选但 isdriver 仍为 true。

为什么 type="reset" 在 Vue/React 里完全没反应
它只重置 DOM 属性(value、checked、selected),不碰 JS 状态。Vue 的 v-model 或 React 的 useState 值根本不会变,导致界面显示和真实状态立刻脱节——比如 checkbox 看起来没勾,但 isDriver 还是 true。
常见错误现象:
• 点了 reset 按钮,input 框清空了,但提交时发现 state 里还是旧值
• 多个自定义组件(如封装的 Form.Check)状态全没变,表单看似“重置”实则失效
• 表单内混用原生 <input> 和受控组件,部分字段清了、部分没清,逻辑断裂
- React 中必须显式调用
setUser(initialValues),不能依赖form.reset() - Vue 中要重置
ref或reactive对象,而不是靠reset按钮 - 如果用了第三方 UI 库(如 Ant Design、Element Plus),它们的输入组件基本都是受控的,
type="reset"对其零影响
如何让 reset 按钮真正同步 JS 状态
核心原则:把“重置”从 DOM 行为转为状态操作。按钮类型必须是 type="button",否则可能意外触发表单提交或被框架拦截。
React 示例(关键不是清 DOM,而是恢复 state):
const initialValues = { name: '', email: '', isAdmin: false };
const [form, setForm] = useState(initialValues);
<button type="button" onclick="{()"> setForm({ ...initialValues })}>
Reset
</button>
Vue 3(setup + ref):

