onClick事件返回代理对象而不是ReactJX中的事件处理程序对象

时间:2017-09-05 10:26:26

标签: javascript reactjs

我尝试将输入的密钥代码与输入的更改事件进行比较,但是当我尝试它时,我只看到代理对象而不是事件处理程序对象。我无法找到任何解决方案。在另一个组件中,我实现了它,但在这个组件中,我不能。

我的处理程序功能是:

  handleChange(event){
    this.setState({
      searchValue : this.searchInput.value
    });
    if(this.searchInput.value.length>2&&!this.state.recommendation&&this.focused){
      this.setState({
        recommendation:true
      });
    } else if(this.searchInput.value.length<3&&this.state.recommendation&&this.focused) {
      this.setState({
        recommendation:false
      });
      return;
    }
    console.log(event) //event is returned as Proxy object
    if(event.keyCode === 13){
      this.context.router.history.push(`/yardim/arama/${this.searchInput.value}`);
      return;
    }

    if(this.searchInput.value.length>2){
      this.bouncer.handle();
    }
  }

和渲染功能是:

render(){
    return(
      <div id="faq-search-box">
        {this.state.recommendation}
        <i className="icon hb-icon-search_icon"></i>
        <input id="faq-search-input" type="text" placeholder="Yardım konusu ara..." value={this.state.searchValue} ref={input=>{this.searchInput=input;}}  onChange={this.handleChange.bind(this)} onFocus={this.onFocus} onBlur={this.onBlur}  />
        <div className="clearfix"></div>
        { this.state.recommendation &&
        <div id="faq-recommendation-box">
          {this.props.FAQRecomendations&&
          <ul>
            {this.props.FAQRecomendations.map((faq)=>
              <li key={faq.id}><a onMouseDown={(e)=>{this.onMouseDown(`/yardim/${faq.slug}#${faq.id}`,e)}} title={faq.name}>{faq.name}</a></li>
            )}
          </ul>
          }
        </div>
        }

      </div>
    )
  }

有什么问题?我如何访问事件处理程序?

2 个答案:

答案 0 :(得分:2)

我找到的解决方案是。问题是由于SyntheticEvent而发生的。

Proxy对象上有一个名为nativeEvent的对象。

谢谢你,我实现了keyCode。

例如:

... 
    if(event.nativeEvent.keyCode === 13){
          this.context.router.history.push(`/yardim/arama/${this.searchInput.value}`);
          return;
        }
...

答案 1 :(得分:1)

  

请尝试收听KeyDown事件。这是演示。

class Demo extends React.Component {
   constructor() {
      super()
      this.state = {
        message:''
      }
   }
   
   onKeyDown(e) {
    if (e.keyCode === 13) {
     console.log('Enter Key Pressed');
    }
  }
  
  handleChange(e) {
    this.setState({
    	message: e.target.value
    });
  }
  
  render() {
    return <div>
    	    <input
              value={this.state.message}
              onChange={this.handleChange.bind(this)}
              onKeyDown={this.onKeyDown}
            />
    	   </div>;
  }
}

ReactDOM.render(
  <Demo />,
  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"/>