我是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中执行基本路由
答案 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);