REECT:元素正在更改无法控制的类型文本的受控输入



我会遇到以下错误,但无法确定为什么发生

警告:js:36警告:搜索框正在更改不受控制的类型文本的受控输入。输入元素不应从受控转换为未受控制(反之亦然(。在组件的寿命

的使用寿命中使用受控或不受控制的输入元素之间做出决定

我有以下文件:

  1. searchbox.js

import React, { Component } from 'react';
    
    class Searchbox extends Component {
    
      // render method
      render() {
        const { value, onChange, onSubmit, children } = this.props
        console.log(value)
        console.log(onChange)
        console.log(onSubmit)
        console.log(children)
        return (
          <section className="search-section">
            <form onSubmit={onSubmit}>
              <input
                type="text"
                className="search-box"
                value={value}
                onChange={onChange}
              />
              <button type="submit">{children}</button>
            </form>
          </section>
        )
      }
    }
    
    export default Searchbox

和app.js文件

import React, { Component } from 'react';
import Searchbox from './components/Searchbox'
//import logo from './logo.svg';
import './App.css';
const DEFAULT_TERM = 'High Fidelity'
class App extends Component {
  // Constructor
  constructor(props) {
    super(props)
    this.state = {
      movie: null,
      searchTerm: DEFAULT_TERM
    }
    this.onSearchSubmit = this.onSearchSubmit.bind(this)
    this.onSearchChange = this.onSearchChange.bind(this)
  }
  // onSearchSubmit method
  onSearchSubmit(e) {
    e.preventDefault()
    console.log("Searching movie with name" + this.status.searchTerm)
  }
  onSearchChange(e){
    console.log(event.target.value)
    this.setState({ searchTerm: event.target.value })
  }
  // render method
  render() {
    const { movie, searchTerm } = this.state
    return (
      <div className="App">
        <Searchbox
          value={searchTerm}
          onChange={this.onSearchChange}
          onSubmit={this.onSearchSubmit}
        >Search
        </Searchbox>
      </div>
    );
  }
}
export default App;

加载一切都很好,但是当我在文本字段中键入某些内容时,则触发错误。

有什么建议?

问题在 onSearchChange 函数中。您已将Input的OnChange事件命名为 e ,但是您正在从全局变量 event

中获取值

替换 onSearchChange 到下面提到的代码:

onSearchChange(event) {
   this.setState({ searchTerm: event.target.value })
}

我收到相同的确切警告。我的TextFieldItem是通过其道具进行更新的儿童组件。以下行是罪魁祸首。

const fieldValue = (field.Value == null) ? undefined : field.Value;

更改线后,将值设置为从未定义为"已解决的警告"。

const fieldValue = (field.Value == null) ? '' : field.Value;

React组件

class TextFieldItem extends React.Component{
        constructor(props){
            super(props);
            this.onChange=this.onChange.bind(this);
        }
        onChange(e){
            event.preventDefault();
            const {onFieldChange,field} = this.props;   
            onFieldChange(e.target.id, e.target.value, e.target.name,field.Type);
        }
        render(){        
            const {field, onFieldChange, onRecordUpdate, IsLookupField,record,currentDocumentType} = this.props;       
            const fieldValue = (field.Value == null) ? '' : field.Value;
            return (
                <div>
                    <label>{field.Name}</label> 
                    <input type="text" key={field.Id} className="form-control" id={field.Id} name={field.Name} onChange={this.onChange} value={fieldValue} />     
                    {IsLookupField && <LookupFieldItem record={record} field={field} onRecordUpdate={onRecordUpdate} documentType={currentDocumentType} /> }
                </div>
                );
        }
    }
         export default TextFieldItem;

相关内容

  • 没有找到相关文章

最新更新