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

Material-UI对话框(/模态框)中TextField每次onChange时失去焦点问题

问题描述

在使用Material-UI的Dialog/Modal组件时,遇到以下问题:点击其中的TextField输入内容,每次触发onChange事件时,该TextField都会失去焦点。

问题代码
<List key={"test1"} style={{ marginBottom: '10px' }}>
  <TextField
    required
    id="filled-basic"
    key={categoryData.title}
    label="Title"
    name="title"
    value={categoryData.title}
    type="name"
    variant="filled"
    style={{ width: "130ch" }}
    onChange={(e)=>{
      setCategoryData({...categoryData,
        title:e.target.value})
        console.log(e.target.value);
    }}
  />
</List>
解决方案

问题根源在于TextField的key属性绑定了categoryData.title:

  • 每次输入触发onChange时,categoryData.title会随输入内容更新,导致key值动态变化
  • React识别到key变更后,会销毁旧的TextField组件并重建新实例,直接导致输入框失去焦点

解决步骤:

  • 给TextField设置固定不变的key,比如用字符串"title-input"这类不会随输入内容改变的标识
  • 若父组件List的key稳定且TextField是唯一子元素,也可以直接移除这个不必要的key

修改后的代码示例:

<List key={"test1"} style={{ marginBottom: '10px' }}>
  <TextField
    required
    id="filled-basic"
    key="title-input"
    label="Title"
    name="title"
    value={categoryData.title}
    type="name"
    variant="filled"
    style={{ width: "130ch" }}
    onChange={(e)=>{
      setCategoryData({...categoryData,
        title:e.target.value})
        console.log(e.target.value);
    }}
  />
</List>

内容的提问来源于stack exchange,提问作者Navnath kumbhar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:40:19