警告:TextField 正在将文本类型的受控输入更改为不受控制

Posted

技术标签:

【中文标题】警告:TextField 正在将文本类型的受控输入更改为不受控制【英文标题】:Warning: TextField is changing a controlled input of type text to be uncontrolled 【发布时间】:2017-09-23 19:53:05 【问题描述】:

使用material ui 文本字段时出错

警告: TextField 正在将文本类型的受控输入更改为不受控制。输入元素不应从受控切换到 不受控制(反之亦然)。决定使用受控或 组件生命周期内不受控制的输入元素


export default class GoogleAutoComplete extends Component 
  render() 
    return (
        <TextField
          ref=(c) => this._input = c
          //errorText=this.state.errorText
          onChange=this.onChangeInput.bind(this)
          name=this.props.name
          placeholder='Search Location'
          style=width:'100%'
          id=this.props.id
          value=this.state.location
        />
     )
  

【问题讨论】:

【参考方案1】:

在定义 state.location 之前,您将 undefined 传递给文本字段的 value 属性。根据定义,没有 value 属性的 TextField 被认为是不受控制的。这可能发生在“第一次”通过渲染函数时。

你可以通过设置你的值来解决这个问题:value=this.props.value?this.props.value:"" 这将确保你的 TextField 组件在整个时间都受到控制,同时在第一次渲染时它仍然是“空的”。

【讨论】:

【参考方案2】:

解决办法是去掉textfield组件中的value属性或者在组件的value属性中放入null值。因为 reactjs 区分了受控和不受控的组件。请找到以下代码。

render() 
    return (
        <TextField
          ref=(c) => this._input = c
          //errorText=this.state.errorText
          onChange=this.onChangeInput.bind(this)
          name=this.props.name
          placeholder='Search Location'
          style=width:'100%'
          id=this.props.id
          value=this.state.location || ''
        />
     )
  

【讨论】:

【参考方案3】:

当您的 TexField 元素的 value 属性为 null 或未定义时,会发生此错误。

快速而肮脏的解决方案:

<TextField
      ref=(c) => this._input = c
      // ...
      value=this.state.location || ''
    />

提示: 最好不要将 state.location 设置为 null 或 undefined,检查您的 componentWillMount 方法。 为了让 React 与你的数据保持同步,你应该控制你的输入。

【讨论】:

【参考方案4】:

不受控制的 Textfield 不直接引用您的组件,而是引用您组件中定义的 Textfield。

React 区分受控组件和不受控组件:

An <Textfield> without a value property is an uncontrolled component

【讨论】:

以上是关于警告:TextField 正在将文本类型的受控输入更改为不受控制的主要内容,如果未能解决你的问题,请参考以下文章

警告:组件正在将文本类型的受控输入更改为不受控制。 (反应.js)

警告:组件正在更改要控制的类型文本的不受控输入

Material UI Select Component - 一个组件正在将文本类型的受控输入更改为不受控制

在 React 中更改受控输入值时发出警告

React-Mobx 警告:组件正在更改不受控制的输入

反应表单错误将类型文本的受控输入更改为不受控制