使用 React 按下回车键时单击 link

Clicking a link when enter key is pressed using React

我已经搜索了一段时间所以这应该不是重复的。但是,我试图在按下回车键时触发 link 单击。

这就是我正在使用的:

handleKeyPress(target) {
  if(target.charCode==13){
    alert('Enter clicked!!!');    
  }
}

搜索输入:

<SearchBox
  type="text"
  value={value}
  onChange={e => this.onChange(e)}
  className="search-box"
  placeholder="Search"
  aria-label="search"
  aria-describedby="basic-addon2"
  onKeyPress={this.handleKeyPress}
/>
<div>
  <Link to={`/search?q=${value}`} className="btn submit-button"><i className="fa fa-search"></i></Link>
</div>

使用 React Instant Search 我想在单击输入时提交输入 'value'。目前我只能在物理点击时提交值:

<div>
  <Link to={`/search?q=${value}`} className="btn submit-button"><i className="fa fa-search"></i></Link>
</div>

我可以让 link 开火。但是,当我也按回车键时,如何才能获得与 link 单击相同的功能?关于如何通过 KeyPress link 搜索值有什么建议吗?

根据 react-statics documentation they recommend installing Reach Router for dynamic routing. To navigate programmatically with Reach Router 你应该可以导入 navigate.

import { navigate } from "@reach/router"

...

handleKeyPress(target) {
  // I'm guessing you have value stored in state
  const { value } = this.state;
  if(target.charCode==13){
    navigate(`/search?q=${value}`);
  }
}

选项 2

老实说,当您 可能 只需 javascript.

时,这似乎是很多工作
handleKeyPress(target) {
  // I'm guessing you have value stored in state
  const { value } = this.state;
  if(target.charCode==13){
    const { href } = window.location;
    window.location.href = `${href}/search?q=${value}`;
  }
}

如果您已经react-router-dom,您可以使用以下内容:

import { withRouter } from 'react-router-dom'
class *ClassName* extends React.Component {
  ..
  handleKeyPress(target, value) {
    const { history } = this.props;
    if(target.charCode==13){
      history.push(`/search?q=${value}`);
    }
  }
  ..
  render() {
    return (
      ..
      <SearchBox
        value={value}
        ..
        onKeyPress={e => this.handleKeyPress(e, value)}
      />
    )
  }
  ..
}

export default withRouter(*ClassName*);

重要的是您使用 withRouter(..) 导出从道具中获取 history