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

React Hook Form结合NumericFormat与MUI TextField出现引用警告求助

警告原因解析

这个警告的核心原因是React函数组件无法直接接收ref属性,必须通过React.forwardRef()包裹才能正确接收和传递ref,具体到你的代码场景:

  • react-hook-form的Controller组件会在field对象中注入一个ref,用于关联表单输入元素,实现聚焦、取值等表单控制逻辑。
  • 你直接将{...field}传递给了NumericFormat组件,这会把field.ref也传给NumericFormat。但NumericFormat本身是一个函数组件,它并没有自动将这个ref转发给内部的customInput(即MUI的TextField)。
  • MUI的TextField虽然是用forwardRef包裹的组件,但由于NumericFormat没有正确传递这个外部ref,导致Controller传递的ref被错误地绑定到了NumericFormat这个函数组件上,触发了React的ref警告。

修复方案

你需要手动处理ref的传递,避免将field.ref直接传给NumericFormat,而是通过NumericFormat的getInputRef属性将ref传递给内部的TextField:

<Controller
    name="price"
    control={control}
    defaultValue={0}
    render={({field: { ref, ...restField }}) => // 解构移除ref,单独处理
        <NumericFormat
            {...restField}
            customInput={TextField}
            value={restField.value}
            onValueChange={(target) => {
                restField.onChange(target.floatValue);
            }}
            getInputRef={ref} // 通过getInputRef将ref传递给TextField
            allowLeadingZeros={false}
            prefix={'$ '}
            thousandSeparator=","
            margin="none"
            label="Price"
            fullWidth
        />
    }
/>

这样处理后,Controller的ref会被正确传递到TextField内部的原生input元素上,既满足了react-hook-form的表单控制需求,也消除了ref警告。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:52:07