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

输入组件按键后失焦,但内联JSX正常的问题求助

自定义输入框按键后失焦问题

输入框失焦演示

我正在构建一个包含多个输入框的页面,自定义MyInput组件每次按键后都会失去焦点,但内联JSX写法的输入框却能正常工作。MyInput的实现逻辑和内联JSX基本一致,不清楚问题出在哪。


问题原因

你是在父组件内部定义的MyInput组件,每次父组件因状态更新触发渲染时,MyInput都会被重新创建成一个全新的组件类型。React会把它识别为不同的组件,卸载旧的MyInput再挂载新的,这就导致了输入框失去焦点。而内联的<input>是原生DOM元素,不会有这个问题。

解决方法

方法一(推荐):将组件移到父组件外部定义

把MyInput放在父组件(比如App)的外面,确保它在每次渲染时都是同一个组件类型:

// 移到App组件外部
const MyInput = () => {
  return <input />;
};

function App() {
  // 你的状态和其他逻辑
  return (
    <div>
      <MyInput />
      <input />
    </div>
  );
}

方法二:用useMemo缓存内部组件(不推荐)

如果因为业务限制必须在父组件内部定义MyInput,可以用useMemo缓存组件,避免每次渲染都重新创建:

import { useMemo } from 'react';

function App() {
  const MyInput = useMemo(() => {
    return () => <input />;
  }, []); // 空依赖数组确保只创建一次

  return (
    <div>
      <MyInput />
      <input />
    </div>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:11:03