使用React按Enter键时单击链接

时间:2019-02-07 18:02:14

标签: javascript reactjs react-instantsearch

我已经搜索了一段时间,所以这不应重复。但是,我试图在按下Enter键时触发链接点击。

这就是我正在使用的:

auto

搜索输入:

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

使用React Instant Search我想在单击enter时提交输入“值”。目前,我只能在物理点击以下内容时提交该值:

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

我可以触发该链接。但是,当我也按Enter键时,如何获得与单击链接相同的功能?关于如何通过KeyPress链接到搜索值的任何建议?

2 个答案:

答案 0 :(得分:1)

根据react-statics documentation,他们建议installing Reach Router进行动态路由。要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}`;
  }
}

答案 1 :(得分:1)

如果您已经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