【问题标题】:React Router generated link is prevented defaultReact Router 生成的链接默认被阻止
【发布时间】:2019-03-04 10:47:18
【问题描述】:

我开始在我的代码中使用反应路由器,但是<Link> 甚至<a> 标签生成的所有链接都不起作用。当我将鼠标放在这些链接上时,我可以看到 URL,这是正确的,但是当我单击它们时,什么也没有发生。我的意思是浏览器中的 URL 不会改变。看来我用了e.preventDefault!由于我是使用 React Router 的新手,我想我错过了一些东西。

这里是部分代码(完整代码真的很长):

index.js:

<Router>
 ...
 <Menu />
 ...
 <Switch>
     <Route path='/smodel/datasource' component={DataSource}/>
 </Switch>
 ...
</Router>

menu.js

<Link to="/smodel/datasource">New</Link>;

我在两个页面中都使用了withRouter函数进行连接,因为我使用了redux。

【问题讨论】:

    标签: javascript reactjs react-router-dom


    【解决方案1】:

    你需要像这样重构你的代码:

    ...
     <Menu />
     ...
    <Router>
     <Switch>
         <Route path='/smodel/datasource' component={DataSource}/>
     </Switch>
    </Router>
    

    &lt;Router /&gt; 内有&lt;Menu /&gt; 需要有&lt;Route /&gt;,但事实并非如此。您只是分配链接,因此它们需要位于 &lt;Router /&gt; 之外。

    &lt;Router /&gt; 可以有&lt;Switch /&gt;&lt;div /&gt; 或任何元素,并且可以用&lt;Route /&gt;s 嵌套在里面。

    【讨论】:

    • 感谢您的快速回复。这会导致此错误:您不应在 之外使用 或 withRouter()
    • 嗯,你搞砸了。
    • 结构很好。 Router 是一个上下文提供者,它应该只使用一次,靠近应用树的顶部。它必须只有一个子元素,因此&lt;React.Fragment&gt; 可以在必要时用于包装多个子组件。
    猜你喜欢
    • 2016-05-04
    • 2018-08-21
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 2014-11-28
    相关资源
    最近更新 更多