4

这个视频,反应路由器似乎很容易使用,但我找不到如何在我的代码中导航,因为我想链接点击一个 div 而不是使用<Link>.

我搜索了 StackOverflow,但没有找到任何适用于 4.0 的答案。尝试从这个问题中导入 browserHistory 会给出未定义(在安装 'react-router' 和 'react-router-dom' 之前和之后) :

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}) => {

有没有办法从路线外部到达这里?例如,导航栏组件将导航到其他组件,但不在 Route 本身内......

4

3 回答 3

3

如果我理解您的问题,这就是您以编程方式创建链接的方式。

    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")
    );
于 2017-03-29T00:23:45.353 回答
2

不得不更多地阅读文档。该history对象仅使用 . 上的component(或其他)属性作为属性传递Route。显然需要包含“历史”包并使用createBrowserHistory并将其传递给Router,然后在Route. 我认为这应该可以正常工作,因为exact没有指定......

import { createBrowserHistory } from 'history';
const history = createBrowserHistory();
ReactDOM.render( (
    <Router history={ history }>
      <Route path="/" component={ App } />
    </Router>
  ),
  document.getElementById('root')
);

在我刚刚<App/>进入内部<Router>并且无法访问这些属性之前。

于 2017-03-29T05:57:39.683 回答
0

你为什么不把你的 div 包裹在链接中,而不是试图绕过它,让你的生活更轻松?

    <Link to="/" >
       <div className="to-component">go to component</div>
    </Link>
于 2018-05-04T13:39:17.230 回答