用代码导航进行反应
看这个视频反应路由器似乎很容易使用,但我找不到如何导航我的代码,因为我想点击一个div链接,而不是使用<Link>
。
我搜索了StackOverflow,但没有找到任何与4.0一起工作的答案。 尝试导入browserHistory会导致未定义(在'react-router-dom'之外安装'react-router'之前和之后):
import { browserHistory } from 'react-router';
console.log('browserHistory:', browserHistory);
我也看到了某个地方,你可以得到一个'背景',但是这显示了'匹配'而不是'背景'的价值:
<Route path="/" render={({ match, context}) => {
console.log('match:', match);
console.log('context:', context);
编辑
在开发工具中,我可以看到“路由器”具有历史记录属性,所以当我添加了我可以实现的功能时:
<Route path="/" render={({ match, context, history}) => {
有没有办法从路线外面得到这个? 例如导航到其他组件但不在路由本身内的导航栏组件...
如果我理解你的问题,这是你如何进行链接programaticaly。
class Test extends React.Component {
handleClick() {
console.log(this.context);
this.context.router.history.push('/some/path');
},
render() {
return (
<div onClick={handleClick}>
This is div.
</div>
)
}
}
Test.contextTypes = {
router: React.PropTypes.object.isRequired
}
ReactDOM.render(
<Test />,
document.getElementById("app")
);
必须更多地阅读文档。 history
对象仅作为使用Route
上的component
(或其他)属性的属性传递。 显然需要包含'history'包并使用createBrowserHistory
并将其传递给Router
,然后在Route
指定组件。 我认为这应该工作正常,因为exact
没有指定...
import { createBrowserHistory } from 'history';
const history = createBrowserHistory();
ReactDOM.render( (
<Router history={ history }>
<Route path="/" component={ App } />
</Router>
),
document.getElementById('root')
);
在<Router>
<App/>
内部有<App/>
之前,无法访问这些属性。
你为什么不把自己的div封装在链接中,而不是试图规避它,让你的生活更轻松?
<Link to="/" >
<div className="to-component">go to component</div>
</Link>
链接地址: http://www.djcxy.com/p/52137.html