Passing react text field input values as parameters to a method

前端 未结 2 1672
借酒劲吻你
借酒劲吻你 2021-02-19 08:41

I have the below input fields of which I need to get the entered inputs and pass it to the onClick event of the button shown below.



        
相关标签:
2条回答
  • 2021-02-19 09:22

    How can I achieve this without storing the values in states?

    I think in this case better use states

    class App extends React.Component {
      constructor() {
        super();
        this.state = {
          topicBox: null,
          payloadBox: null
        };
        
        this.publish = this.publish.bind(this);
        this.handleChange = this.handleChange.bind(this);
      }
      
      handleChange({ target }) {
        this.setState({
          [target.name]: target.value
        });
      }
    
      publish() {
        console.log( this.state.topicBox, this.state.payloadBox );
      }
      
      render() {
        return <div>
          <input 
            type="text" 
            name="topicBox" 
            placeholder="Enter topic here..." 
            value={ this.state.topicBox }
            onChange={ this.handleChange } 
          />
          
          <input 
            type="text" 
            name="payloadBox" 
            placeholder="Enter payload here..."
            value={ this.state.payloadBox } 
            onChange={ this.handleChange } 
          />
          
          <button value="Send" onClick={ this.publish }>Publish</button>
        </div>
      }
    }
    
    ReactDOM.render(<App />, document.getElementById('container'));
    <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="container"></div>

    0 讨论(0)
  • 2021-02-19 09:39

    You can add ref for each text field, and read the value from it like:

    class App extends React.Component {
      constructor() {
        super();
        this.publish = this.publish.bind(this);
      }
    
      publish(topicBox, payloadBox) {
        alert(this.refs.topic.value);
        alert(this.refs.payload.value);
      }
    
      render() {
        return <div>
          <input 
            ref="topic"
            type="text"
            name="topicBox"
            placeholder="Enter topic here..."/>
    
          <input 
            ref="payload"
            type="text"
            name="payloadBox"
            placeholder="Enter payload here..."/>
    
          <button 
            value="Send"
            onClick={this.publish}> 
            Publish
          </button>
        </div>
      }
    }
    
    ReactDOM.render(<App />, document.getElementById('container'));
    

    Working fiddle https://jsfiddle.net/hjx3ug8a/15/

    Thanks for Alexander T for his addition!

    0 讨论(0)
提交回复
热议问题