如何通过 clickHandlers 导航?

How to navigate via clickHandlers?

我刚开始学习React,遇到了下面的场景。

有一个输入字段,单击搜索按钮时它会获取输入值并重定向到 /search/search-query/some-action

我已经设置了路径,定义了通往正确视图的路线。而且,我能够使用 href 链接访问这条路径。但我的实际要求是有一个按钮并通过 onClick 处理程序将用户带到此路径。

搜索了很多并找到了多个(模糊的)解决方案,例如 react-navigate-mixin 等。但是我找不到任何关于其用法的文档。

谁能给我指出正确的方向?

我假设您不是在构建单页应用程序,而是在使用 React 路由器之类的东西。而您需要做的只是根据输入导航到 url。

根据您的需要,主要有两种方法:

  1. <a> 设置为您的按钮:
var Component = React.createClass({
  getInitialState: function() { return {query: ''} },
  queryChange: function(evt) {
    this.setState({query: evt.target.value});
  },
  _buildLinkHref: function() {
    return '/search/'+this.state.query+'/some-action';
  },
  render: function() {
    return (
      <div className="component-wrapper">
        <input type="text" value={this.state.query} />
        <a href={this._buildLinkHref()} className="button">
          Search
        </a>
      </div>
    );
  }
});

这样您就可以将查询(输入的值)保持在状态中。并且每当输入改变时自动改变link.

的href
  1. 使用 <button> 并以编程方式重定向:
var Component = React.createClass({
  getInitialState: function() { return {query: ''} },
  queryChange: function(evt) {
    this.setState({query: evt.target.value});
  },
  handleSearch: function() {
    window.location = '/search/'+this.state.query+'/some-action';
  },
  render: function() {
    return (
      <div className="component-wrapper">
        <input type="text" value={this.state.query} />
        <button onClick={this.handleSearch()} className="button">
          Search
        </button>
      </div>
    );
  }
});

通过这种方式,您可以通过将所需位置设置为 window.location 来以编程方式处理重定向。

从现有答案中添加可能需要像这样绑定您的函数:

constructor(props) {
    super(props);
    this.handleSearch = this.handleSearch.bind(this);
}