【问题标题】:React-router v4 nested routes & programmatic navigationReact-router v4 嵌套路由和编程导航
【发布时间】:2017-10-14 08:03:39
【问题描述】:

所以,我以这种方式设置了几条路线:

index.js

<Route exact path={pathDefault} component={Home}>
    <Route path={path1} component={component1}/>
    <Route path={path2} component={component2}/>
</Route>

component1.js

<Route exact path={`${props.match.url}`} component={Summary}/>
<Route path={`${props.match.url}`/someOtherPath1} component={SubComponent1}/>
<Route path={`${props.match.url}`/someOtherPath2} component={SubComponent2}/>

component2.js 设置类似。

这里的想法是我有多个顶级路由,它们有默认页面。但是,然后可以在子路由之间切换。这工作正常,直到在像component1/someOtherPath2 这样的子级别路由之一时,我可以在someOtherPath1someOtherPath2 之间切换,但是如果我尝试使用history.push(path2) 更改顶级路由之一,而不是回到顶级组件(即 path1 的默认组件),它最终会推送一个复合的,因此不正确的路由,例如 component1/component2

那么,在较低级别的组件中以编程方式(最好使用history.push 或类似方法)时,您将如何更改较高级别的路由?

【问题讨论】:

  • 您可以使用history.push,只要您将历史从您注入到您的 react-router 时导入。将其导入组件后,您可以像往常一样使用history.push。如果您遇到困难,请告诉我,我会为您创建一个沙盒。
  • 注入时导入是什么意思?你的意思是设置&lt;BrowserHistory&gt;
  • 我应该提一下,我在组件上使用withRouter 来获取道具的历史记录。

标签: javascript reactjs react-router react-redux


【解决方案1】:

history.pushpath 作为参数,而不是 component

history.push(路径,[状态])

例如:

history.push('/home');

history.push('/home', { some: 'state' });

您可以在docs 中了解更多信息。

编辑:

如果要更改根路径,也不要忘记前导 /。例如:

history.push('/path1/path2');

【讨论】:

  • 我正在将路径传递给组件,它与组件的名称相同。对困惑感到抱歉。为了清楚起见,我将进行编辑。
  • @Araymer 当您想更改根路径时,您是从/ 开始的吗?喜欢history.push('/path1/path2');
  • 当我尝试在前面添加斜杠时出现错误:Failed to execute 'pushState' on 'History': A history state object with URL 'http://path_to/classify_records' cannot be created in a document with origin 'http://localhost:3000' and URL 'http://localhost:3000/path_to'.
  • 好吧,没关系,这看起来是个问题。出于某种原因,当我附加一个斜线时,它是斜线的两倍。这是一个我可以轻松修复的错误。但是,它现在正在工作。如果你想编辑你的答案,我可以给你积分。我的路径建设沿线某处出了点问题。
猜你喜欢
  • 2017-08-28
  • 2019-01-07
  • 2017-06-25
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-05
相关资源
最近更新 更多