Input elements should not switch from controlled to uncontrolled ReactJs error

前端 未结 2 1849
梦谈多话
梦谈多话 2021-01-20 19:09

I\'m trying to handle changes in my form. I have title, description, and category.

The first input(title) -> Unable to type in the field.

The second input(d

相关标签:
2条回答
  • 2021-01-20 19:41

    Problem is in onChange function, you are using common onChange function so instead of updating all with same value update the specific state value.

    Use this function:

    handleChange(e) {
        this.setState({
            [e.target.name] : e.target.value
        }); 
    }
    

    Use name property to update the specific state, and you need to define the name='category' with select field.

    Check the working example:

    class AddDeal extends React.Component {
      constructor(props) {
        super(props);
    
        // Set the state
        this.state = {
          title: '',
          description: '',
          category: 'technology'
        };
    
        this.onSubmit = this.onSubmit.bind(this);
        this.handleChange = this.handleChange.bind(this);
      }
    
      onSubmit(e) {
        e.preventDefault();
    
        alert('Title is: ' + this.state.title + 'Description is: ' + this.state.description + 'Category is: ' + this.state.category);
      }
    
      handleChange(e) {
        this.setState({
            [e.target.name] : e.target.value
        });
      }
    
      render() {
        return (
        <div>
          <h1>Add Deal</h1>
          <form onSubmit={this.onSubmit}>
            <label><input value={this.state.title} onChange={this.handleChange} type="text" name="title"/></label>
            <label><input value={this.state.description} onChange={this.handleChange} type="text" name="description" /></label>
            <select name='category' value={this.state.category} onChange={this.handleChange}>
                <option value="technology">Technology</option>
                <option value="food">Food</option>
                <option value="drink">Drink</option>
                <option value="books">Books</option>
              </select>
            <input type="submit" value="Submit"/>
          </form>
        </div>
        );
      }
    }
    
    ReactDOM.render(<AddDeal/>, document.getElementById('app'))
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
    
    <div id='app'/>

    0 讨论(0)
  • 2021-01-20 19:57

    change your function to

     handleChange(e) {
        this.setState({
            [e.target.name] : e.target.value
        }); 
    }
    
    0 讨论(0)
提交回复
热议问题