我正在尝试更改点击页面。 这是点击功能
import React, { Component } from 'react';
import {BrowserRouter as Router,Route} from 'react-router-dom';
import { browserHistory } from 'react-router';
class Buttons extends Component {
skipClick(){
browserHistory.push('/sessionstate2');
}
render() {
return (<a className={skipShow} onClick={this.skipClick}>Skip</a>)
}
}
和index.js
import browserHistory from 'react-router';
ReactDOM.render(
<Router history={browserHistory}>
<div>
<Route exact path="/" component={App} />
<Route exact path="/sessionstate1" component={Template1}/>
<Route exact path="/sessionstate2" component={Template2}/>
<Route exact path="/sessionstate3" component={Template3}/>
</div>
</Router>,
document.getElementById('root')
);
正在给予
未捕获的TypeError:无法读取属性&#39; push&#39;未定义的
请告诉我,我在这里做错了什么?
答案 0 :(得分:4)
以下是如何以编程方式更改路由器v4中的路由的可重现示例。
首先,为简单的应用程序安装样板:
sudo npm install -g create-react-app
create-react-app demo-app
cd demo-app
npm install react-router-dom
然后我们将/src/App.js
更改为:
import React from 'react'
import {BrowserRouter as Router, Route, Link, withRouter} from 'react-router-dom'
const BasicExample = () => (
<Router>
<div>
<li><Link to="/">Home</Link></li>
<li><Link to="/about">About</Link></li>
<Route exact path="/" component={Home}/>
<Route path="/about" component={About}/>
</div>
</Router>
)
const Home = () => (
<div>
<h2>Home</h2>
</div>
)
const Button = withRouter(({history}) => (
<button type='button' onClick={() => { history.push('/new-location') }}>Click Me!</button>
))
const About = () => (
<div>
<h2>About</h2>
<Button />
</div>
)
export default BasicExample
然后启动服务器:
npm run start
如果导航到localhost:3000,然后单击“关于”,您将看到按钮组件。单击它将以编程方式将路由更改为/new-location
答案 1 :(得分:0)
您不再需要使用browserHistory了。 React-router-dom注入组件路由相关的道具和上下文。 其中一个道具是历史&#39;在这个历史对象上是一个函数push,你可以调用它并传递你想要导航到的路径。
在类基本组件中的示例,您可以创建一个类似下面的函数作为onClick处理程序来重定向到特定链接
root/build.gradle
在函数库无状态组件中
redirectToSessionStatePage() {
this.props.history.push('/sessionstate2'); OR
this.context.router.history.push('/sessionstate2');
}