2017-08-29 105 views
1

我很新ReactJS我只是想做一些小事情,以了解更多。ReactJS OnKeyPress触发按钮按

我想知道如果OnKeyPress可以触发按钮按下。我见过几个类似的问题,但触发的只是一个console.log或一个警报。所以我不知道如何触发按钮按下。

这是我到目前为止有:

class Form extends React.Component { 
    onButtonPress = (e) => { 
    // this is just an example of what happens when the button is pressed. 
    this.setState({isClicked: true}); 
    } 

    keyPress = (event) => { 
    if (event.key == 'Enter'){ 
     // How would I trigger the button that is in the render? I have this so far. 
     this.onButtonPress(); 
    } 
    } 

    render() { 
    return (
     <div> 
     <div className="fieldForm"> 
      <input 
      value={name} 
      type="name" 
      onKeyPress={this.keyPress} 
      /> 
     </div> 
     <Button onClick={this.onButtonPress}>Submit</Button> 
     </div> 
    ) 
    } 
} 

请注意,我并没有包括在这里的一切,如构造,道具,或者对象属性的状态。

这样做的目的是使它看起来像按钮已被点击。当按钮被点击时,它会在按钮上显示一个小的加载标志。如果我按下输入按钮(按钮上的加载标志,这就是为什么我要按下按钮),我想要发生同样的事情。

这可能吗?

+0

相当肯定的是,'event.key'值是所有小写 – Derek

回答

2

除非您有非常特殊的需求,否则编程式触发DOM事件不是您应该做的事情。

两个onKeyPressonClick是事件处理程序,你可以做你想做的,当事件发生什么。我只需要调用一个函数来设置你想要处理的状态。

下面是一个例子:

class Form extends React.Component { 
    handleFormSubmit =() => { 
    this.setState({ isClicked: true }); 
    }; 

    handleButtonPress =() => { 
    this.handleFormSubmit(); 
    }; 

    handleKeyPress = event => { 
    if (event.key == 'Enter') { 
     this.handleFormSubmit(); 
    } 
    }; 

    render() { 
    return (
     <div> 
     <div className="fieldForm"> 
      <input value={name} type="name" onKeyPress={this.handleKeyPress} /> 
     </div> 
     <Button onClick={this.handleButtonPress} loading={this.state.Load}> 
      Submit 
     </Button> 
     </div> 
    ); 
    } 
} 
+0

当你说的具体需求,那会是意味着什么?什么时候可以触发DOM事件? – chakolatemilk

+0

例如,如果您正在使用仅对DOM事件作出反应的第三方库。无论如何,这样的事情应该很少见。我只会这样做,如果它是唯一的选择。 – elas

+1

@chakolatemilk阅读[refs](https://facebook.github.io/react/docs/refs-and-the-dom.html#when-to-use-refs)。 – Soorena

1

如果您有没有其他办法应该点击这个元素对一些模糊的原因和方法elas说,没有为工作您。试试这个:

onButtonPress = (e) => { 
    console.log('hi hi') 
    } 

    handleKeyPress = (event) => { 
    if (event.key === 'Enter') { 
     this.refs.but.click() 
    } 
    } 

    render() { 
    return (
     <Layout> 
     <div> 
      <div className="fieldForm"> 
      <input 
       value={'name'} 
       type="name" 
       onKeyPress={(e) => this.handleKeyPress(e)} 
      /> 
      </div> 
      <Button onClick={this.onButtonPress} ref="but">Submit</Button> 
     </div> 
     </Layout> 
    ) 
    } 
+0

如果您想知道为什么我要求您先尝试其他方法,那是因为使用[refs](https://facebook.github.io/react/docs/refs-and-the-dom.html# when-to-use-refs)在反应中不是一个非常明智的举动,并且它是某种反模式,因为您正在操作实际的DOM。 – Soorena

+0

谢谢你向我展示如何使用refs!我不认为我会用这种方法,因为你说这不是很明智,@埃拉斯说了几乎相同的东西。 – chakolatemilk