单击即可在React JS中进行路由

时间:2018-10-23 06:46:11

标签: reactjs routing react-router

我是React的新手,我想单击按钮导航到另一个组件。我只想执行一个简单的路由。这是我尝试过的代码。但是我无法路由。

import React, { Component } from 'react';
import { BrowserRouter as Router, Route, Switch, Redirect } from 'react-router-dom'
import Hello from './HelloComponent';
class App extends Component {

  constructor(props) {
    super(props);
    this.try = this.try.bind(this)
  }
  try = () => {
    alert();
    <div>
      <Router>
        <Route path="/hello" component={Hello} />
      </Router>
    </div>
  }
  render() {
    return (
      <div className="App">
        <div className="container">

          <button id="b1" onClick={this.try}>Click me</button>
        </div>
      </div>
    );
  }
}
export default App;

请帮助我使用此代码在react JS中执行基本路由

3 个答案:

答案 0 :(得分:2)

您无法将JSX返回给onClick处理程序,因为它不会对其执行任何操作。

您需要预先在渲染器中配置路线,并使用history.push更改路线

下面是您可以参考的示例代码

import React, { Component } from 'react';
import { BrowserRouter as Router, Route,Switch, Redirect} from 'react-router-dom'
import Hello from './HelloComponent';
class App extends Component {
  try = () => {
      this.props.history.push('/hello');
  }
  render() {
    return (
      <div className="App">
        <div className="container">
            <button id="b1" onClick ={this.try}>Click me</button>
            <Route path="/hello" component={Hello}/>
        </div>
      </div>
    );
  }
}
export default () => (
   <div>
      <Router>
           <Route component={App} />
      </Router>
  </div>
);

答案 1 :(得分:2)

我建议您看看doc

<Route path="/hello" component={Hello}/>会在<Route/>的确切位置显示组件Hello,但是我认为您的函数在这里不会执行任何操作,因为它返回了<div>,但是它在哪里呢?

您需要某种“高级”组件来呈现您的路线,然后调用<Link/>

然后尝试将按钮嵌套在<Link/>内吗?

<Link to="/??">
     <button id="b1">
          Click me
     </button>
</Link>

答案 2 :(得分:2)

在您的代码中

try = () => {
             alert();
            <div>
              <Router>
                   <Route path="/hello" component={Hello}/>
              </Router>
            </div>
           }

您只需推动路线,这并不是将您带到其他页面的动作

波纹管代码可以正常工作,将路由器放置在单独的组件中是一种很好的做法。 click here您可以在codesandbox中找到此代码

import React, { Component } from "react";
import ReactDOM from "react-dom";
import { BrowserRouter as Router, Route, Switch } from "react-router-dom";
import "./styles.css";

function RouterComponet() {
  return (
    <Router>
      <Switch>
        <Route exact path="/" component={App} />
        <Route path="/user" component={User} />
      </Switch>
    </Router>
  );
}
class App extends Component {
  constructor(props) {
    super(props);
  }
  onClick = () => {
    this.props.history.push("/user");
  };
  render() {
    return (
      <div>
        <h1>App component</h1>
        <a onClick={this.onClick} className="link">
          click here
        </a>{" "}
        to user page
      </div>
    );
  }
}

class User extends Component {
  constructor(props) {
    super(props);
  }
  onClick = () => {
    this.props.history.push("/");
  };
  render() {
    return (
      <div>
        <h1>User Componet</h1>
        <a onClick={this.onClick} className="link">
          click here
        </a>{" "}
        to back
      </div>
    );
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render(<RouterComponet />, rootElement);