Reactjs:使用 .blur() 使按钮元素失去焦点

Mic*_*rts 1 javascript reactjs react-dom

我在学习 react 时遇到了一个小问题 - 我想不聚焦(又名blur())按钮 DOM 元素,但由于某种原因,这不太有效。

我认为这个问题,从我能读到的,是关于 reactstrapButton组件的使用:

<Button className={buttonClass} onClick={this.handleCopyToClipboardClick} ref={this.buttonBlurRef}>
  <div className="d-flex justify-content-between">
    <span></span>
    <span>{ this.state.hasCopiedToClipboard ? 'Copied to clipboard!' : this.state.buttonText }</span>
    <span><FontAwesomeIcon icon="copy" /></span>
  </div>
</Button>
Run Code Online (Sandbox Code Playgroud)

我在一个组件上绑定了一个 ref?我认为这就是它不起作用的原因。

onClick功能正在运行,我已将其包含在下面。我在我尝试过的东西中包含了一些注释掉的代码 - 所有这些都破坏了handleCopyToClipboardClick功能。

handleCopyToClipboardClick() {
  this.setState(state => ({
    hasCopiedToClipboard: !state.hasCopiedToClipboard
  }));

  // this.buttonBlurRef.current.blur(); <= This isn't working

  // this.buttonBlurRef.blur(); <= This isn't working either

  // this.refs.buttonBlurRef.current.blur(); <= Or this

  // this.refs.buttonBlurRef.blur(); <= Nor this... :'(

  setTimeout(
    function() {
      this.setState(state => ({
        hasCopiedToClipboard: !state.hasCopiedToClipboard
      }));
    }.bind(this),
    1500
  );
}
Run Code Online (Sandbox Code Playgroud)

这也是我的组件构造函数:

constructor(props) {
  super(props);
  this.buttonBlurRef = React.createRef();

  this.state = {
    hasCopiedToClipboard: false,
  };

  this.handleCopyToClipboardClick = this.handleCopyToClipboardClick.bind(this);
}
Run Code Online (Sandbox Code Playgroud)

任何关于我如何可能分散我的 Bootstrap 的Button建议都会很棒!:)

Mac*_*was 7

activeElement的文档中有一个属性,因此您可能只需调用document.activeElement.blur()它就可以了。您也可以尝试换一种方式,而不是在您的元素上调用模糊 - 将焦点放在其他元素上,例如整个文档:window.focus()document.body.focus()。希望这可以帮助