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
相关产品推荐
相关产品推荐

