You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Material-UI TextField的required与defaultValue属性失效但placeholder正常问题

问题根因

  • defaultValue失效:你同时为TextField配置了value属性和defaultValue属性。React表单组件不支持同时使用受控模式(绑定value+onChange)和非受控模式(用defaultValue),二者共存时defaultValue会被直接忽略,优先级以value为准。
  • required失效:required是HTML原生表单验证属性,只有组件被包裹在<form>标签内、且触发表单提交事件时才会触发默认校验逻辑。你当前是单独点击保存按钮触发保存逻辑,没有走表单提交流程,因此原生校验不会生效。

解决方案

1. 修复defaultValue不生效问题

既然你已经用了受控模式绑定editingText,直接在点击编辑按钮触发编辑状态的同时,给editingText赋初始默认值即可,删除TextField上的defaultValue属性:

<IconButton aria-label="Edit">
  <EditIcon onClick={() => {
    setTaskEditing(task.id)
    // 这里设置初始值,替换成你需要的默认值即可,比如原任务文本task.text
    setEditingText('hello')
  }} />
</IconButton>

2. 修复required不生效问题

两种方案二选一即可:

  • 方案一:保留现有交互,自行加非空校验。点击保存按钮时先判断内容是否为空,空值拦截保存逻辑
<SaveIcon onClick={() => {
  if (!editingText.trim()) return alert('请输入内容')
  editTask(task.id)
}} />
  • 方案二:改用form表单原生校验。把输入区域包裹在<form>标签内,保存按钮设为type="submit",在表单提交事件中处理保存逻辑,此时required属性会自动生效
// 编辑态的CardHeader部分修改为
title={
  <form id="edit-form" onSubmit={(e) => {
    e.preventDefault()
    editTask(task.id)
  }}>
    <TextField
      style={{ width: 410 }}
      required
      variant="outlined"
      onChange={(e) => setEditingText(e.target.value)}
      placeholder='This is a placeholder'
      value={editingText}
    />
  </form>
}
// 保存按钮修改为
<IconButton aria-label="SaveEdits" type="submit" form="edit-form">
  <SaveIcon />
</IconButton>

内容的提问来源于stack exchange,提问作者Lloyd Rajoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:06:00