React: How to listen to child component events

后端 未结 1 1410
日久生厌
日久生厌 2021-02-05 22:54

I have a component, let\'s say it contains a form. The form has child components which are essentially UI widgets for outputting text inputs and select menus.

The select

相关标签:
1条回答
  • 2021-02-05 23:29

    Using <Select onChange={...} /> won't override the <select onChange={...} /> inside Select's render method. The <Select/> component and the <select/> component it renders have completely different sets of props.

    The simplest way to do what you want, I think, is to have your Select's handleChange method call this.props.onChange. You can just pass it the same e argument handleChange receives:

    var Form = React.createClass({
      handleSelectChange: function(){
        // Do something when <Select /> changes
      },
    
      render: function () {
        // ...
        return (
          <form>
            <Select name="selectMenu"
              id="selectMenu"
              options={selectMenuOptions}
              onChange={this.handleSelectChange} />
          </form>
          );
        }
    });
    
    var Select = React.createClass({
      // ...
    
      handleChange: function (e) {
        if (this.props.onChange) {
          this.props.onChange(e);
        }
        // Update buttonText state
      },
    
      render: function () {
        return (
          <div className={this.props.className}>
            <div className="select__button">{this.state.buttonText}</div>
            <select className="select__selector"
              ref="select"
              onChange={this.handleChange}>
              {this.props.options.map(function(option, i){
                return (<Option option={option} key={i} />);
              })}
            </select>
          </div>
        );
      }
    });
    
    0 讨论(0)
提交回复
热议问题