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

ReactJS中useState更新值时输入框失焦问题求助

React输入框在useState更新时失焦的解决办法

问题根源

你把MyLittleInput组件定义在了App组件内部,每次App因useState更新触发重渲染时,MyLittleInput都会被重新定义为全新的组件类型。React会卸载旧的组件实例并重新挂载新实例,直接导致输入框失去焦点。

修复方案

将MyLittleInput组件移到App组件外部定义,确保组件类型在重渲染时保持稳定,同时通过props传递所需的回调函数:

import { useState } from "react";

// 组件移至App外部,避免每次重渲染被重新创建
const MyLittleInput = ({ onChange }) => {
  return <input onChange={onChange} />;
};

export default function App() {
  const [hasInputChanged, setHasInputChanged] = useState(false);
  const colorList = ["orange", "blue", "yellow"];

  function handleChange(e) {
    setHasInputChanged(true);
  }

  return (
    <>
      {colorList.map((color) => (
        <MyLittleInput key={color} onChange={handleChange} />
      ))}
    </>
  );
}

补充说明

你之前尝试的key属性是正确的,但因为组件被反复重新定义,React无法识别这是同一个组件,所以key的作用被抵消。调整组件定义位置后,React会仅更新组件的props而非卸载重建,输入框就能保持焦点状态。

内容的提问来源于stack exchange,提问作者Fabrice CASTAGNET

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:15:34