【问题标题】:ReactJS OnKeyPress to trigger a button pressReactJS OnKeyPress 触发按钮按下
【发布时间】:2018-02-07 13:06:05
【问题描述】:

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

请注意,我没有在此处包含所有内容,例如构造函数、道具或状态对象属性。

这样做的目的是使它看起来像按钮已被单击。单击按钮时,它将在按钮上显示一个小的加载标志。如果我按下回车键,我希望同样的事情发生(按钮上有加载标志,这就是我想要按下按钮的原因)。

这可能吗?

【问题讨论】:

  • 很确定event.key 的值都是小写的

标签: javascript html reactjs onclick onkeypress


【解决方案1】:

除非您有非常特殊的需求,否则您不应该以编程方式触发 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>
    );
  }
}

【讨论】:

  • 当你说具体需求时,这意味着什么?什么时候可以触发 DOM 事件?
  • 例如,如果您正在使用仅对 DOM 事件做出反应的第三方库。无论如何,这样的事情应该很少见。如果这是唯一的选择,我只会这样做。
  • @chakolatemilk 了解refs
【解决方案2】:

如果您没有其他方法并且您应该由于某种模糊的原因而单击此元素并且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>
    )
  }

【讨论】:

  • 如果你想知道为什么我要你先尝试其他方法,那是因为使用 refs 在反应中不是一个非常明智的举动,而且它在某种程度上是反模式,因为你正在操纵实际的 DOM。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 2023-03-03
相关资源
最近更新 更多