【问题标题】:onClick Event return Proxy object instead of event handler object in ReactJXonClick 事件返回代理对象而不是 ReactJX 中的事件处理程序对象
【发布时间】:2018-02-13 14:48:46
【问题描述】:

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

我的处理函数是:

  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>
    )
  }

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

【问题讨论】:

  • 查看答案here。您需要检查 keyPress 事件是否发生变化。
  • @bennygenel 没有改变。我有同样的结果。我认为,onkeypress 或 onchange 无关紧要。

标签: javascript reactjs


【解决方案1】:

我找到的解决方案是这样的。出现问题是因为SyntheticEvent

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

多亏了它我得到了keyCode。

例如:

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

【讨论】:

    【解决方案2】:

    请尝试监听 onKeyDown 事件。这是演示。

    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"/>

    【讨论】:

    • 我解决了一个解决方案。事件代理上有一个对象名称。它是原生事件。我实现了感谢它的表达。
    猜你喜欢
    • 2010-12-06
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多