You need to enable JavaScript to run this app. 使用react-number-format搭配Material-UI TextField无法连续输入字符问题
优惠活动
大模型
产品
解决方案
定价
更多

使用react-number-format搭配Material-UI TextField无法连续输入字符问题

问题原因

你将自定义输入组件NumberFormatCustom声明在了App组件内部,每次输入触发minAssets状态更新时,App组件都会重渲染,此时NumberFormatCustom会被视为全新的组件类型,React会卸载旧的输入框DOM节点、挂载新的节点,就会出现输入一次后输入框失去焦点的问题。

修复方案

把NumberFormatCustom组件移到App组件外部定义即可,修改后完整代码如下:

import React,{useState} from 'react'
import { TextField} from "@material-ui/core";
import NumberFormat from "react-number-format";

// 移到App组件外部定义
const NumberFormatCustom = (props) => {
  const { inputRef, onChange, ...other } = props;
  return (
    <NumberFormat
      {...other}
      getInputRef={inputRef}
      onValueChange={(values) => {
        onChange({
          target: {
            name: props.name,
            value: values.value,
          },
        });
      }}
      thousandSeparator
      isNumericString
      prefix="$"
    />
  );
};

export default function App() {
  const [minAssets, setMinAssets] = useState();

  return (
    <div className="App">
        <TextField
          label="Min Assets"
          value={minAssets}
          onChange={(e) => setMinAssets(e.target.value)}
          name="minAssets"
          variant="outlined"
          id="Minimum-Income-filter"
          InputProps={{
            inputComponent: NumberFormatCustom,
          }}
        />
    </div>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 23:45:00