首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React-router - redirect on load?

React-router - redirect on load?
EN

Stack Overflow用户
提问于 2017-10-10 21:28:13
回答 1查看 12.3K关注 0票数 3

我是React开发的新手,我不确定如何处理这个问题。

我有一个简单的路由应用程序,它看起来像这样:

代码语言:javascript
复制
<Router>
    <div>
      <Route path="/" component={MainComponent} />
      <Route path="/dashboard" component={DashboardComponent} />
      <Route path="/users" component={UsersComponent} />
      <Route path="/admin" component={AdminComponent} />
    </div>
</Router>

当我转到localhost:3000/myApp/index.html时,我的MainComponent按预期加载,它保存了站点的主要布局、导航等。

然后我必须点击“仪表板”切换到DashboardComponent,“用户”移动到UsersComponent和“管理”加载AdminComponent,这些都加载到导航旁边的MainComponent

所以它是这样的:

代码语言:javascript
复制
localhost:3000/myApp = MainComponent 
localhost:3000/dashboard = MainComponent + DashboardComponent
localhost:3000/users = MainComponent + UsersComponent
localhost:3000/admin = MainComponent + AdminComponent

我想要实现的是永远不要单独加载MainComponent (因为它除了导航之外什么都不包含),而是使用它加载DashboardComponent,这样一切都会像以前一样工作,只需稍作更改:

代码语言:javascript
复制
localhost:3000/myApp = MainComponent + DashboardComponent

所以我想我想要加载我的MainComponent,然后在init上加载仪表板。如果网址也能自动从index.html更改为/dashboard,那就太好了。

我试着在我的MainComponent.jsx中做这样的事情:

代码语言:javascript
复制
componentWillMount() {
  <Redirect to="/dashboard" />
  console.log("It works!");
}

但它什么也不做,我认为Application.jsx中第一个示例中的路由器只是覆盖了它。

我想我可能做错了什么,因为我觉得这是路由器最基本的事情之一,但我在文档中找不到任何答案和任何对我有帮助的东西。有什么提示吗?

我希望localhost:3000/myApp/index.html在应用程序启动时将localhost:3000/dashboard重定向给我(我认为路由器加载正确的组件应该足够了)。

重新路由不执行任何操作(没有错误,但路由没有变化):

代码语言:javascript
复制
    <Router>
        <div>
          <Route path="/" component={MainComponent} />
          <Route path="/dashboard" component={DashboardComponent} />
          <Route path="/users" component={UsersComponent} />
          <Route path="/admin" component={AdminComponent} />
          <Route exact path="/" component={ () => <Redirect to={DashboardComponent} /> } />
        </div>
    </Router>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-10 21:59:37

您应该使用MainComponent包装您的路径,并在Switch中包装,并允许'/'显示DashboardComponent

代码语言:javascript
复制
<Router history={history}>
  <MainComponent>
    <Switch>
      <Route exact path="/" component={DashboardComponent} />
      <Route exact path="/dashboard" component={DashboardComponent} />
      <Route exact path="/users" component={UsersComponent} />
      <Route exact path="/admin" component={AdminComponent} />
    </Switch>
  </MainComponent>
</Router>

或者,如果您不希望'/'显示仪表板,则可以使用Redirect

代码语言:javascript
复制
<Router history={history}>
  <MainComponent>
    <Switch>
      <Redirect exact from="/" to="/dashboard" />
      <Route exact path="/dashboard" component={DashboardComponent} />
      <Route exact path="/users" component={UsersComponent} />
      <Route exact path="/admin" component={AdminComponent} />
    </Switch>
  </MainComponent>
</Router>

请注意:您需要将this.props.children放在MainComponentrender方法中。

Alternatively,你可以把<Switch>...</Switch>放在你的MainComponent里面

路由器

代码语言:javascript
复制
<Router history={history}>
  <Switch>
    <Redirect exact from="/" to="/dashboard" />
    <MainComponent />
  </Switch>
</Router>

MainComponent

代码语言:javascript
复制
class MainComponent extends React.Component {
    ...

    render() {

      return <span>
          //Navigation content here....

        <Switch>
          <Route exact path="/dashboard" component={DashboardComponent} />
          <Route exact path="/users" component={UsersComponent} />
          <Route exact path="/admin" component={AdminComponent} />
        </Switch>
      </span>

    }

}

有用的链接:

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46668034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档