React 路由器组件出现然后立即消失

Posted

技术标签:

【中文标题】React 路由器组件出现然后立即消失【英文标题】:React router component appears then disappears immediately 【发布时间】:2018-06-04 05:29:55 【问题描述】:

我有一个名为 main 的组件。这里面有这个:

<Router>
      <div>
        <ul>
          <li><Link to="/categories">Category</Link></li>
          <li><Link to="/basket">Basket</Link></li>
        </ul>

        <Route
          path="/basket"
          render=() => (
            <Basket
            />
          )
        />

        <Route
          path="/categories"
          render=() => (
            <Categories />
          )
        />
      </div>
    </Router>

然后我单击类别并呈现类别组件,就是这样:

const Categories = () => (
  <Router>
    <div>
      <ul>
        <li><Link to="/trainers">Trainers</Link></li>
        <li><Link to="/rucksacks">rucksacks</Link></li>
      </ul>

      <Route path="/trainers" component=Trainers />
      <Route path="/rucksacks" component=Rucksacks />
    </div>
  </Router>
);

const Trainers = () => (
  <div>
    <h2>Trainers</h2>
  </div>
);

const Rucksacks = () => (
  <div>
    <h2>Rucksacks</h2>
  </div>
);

然后当我点击 Trainers 或 Rucksacks 时,h2 元素会在屏幕上闪烁。即出现然后立即消失。为什么会这样?

我想要实现的是拥有一个主页,然后您可以单击呈现我所有类别的类别,然后您可以单击将呈现产品列表的子类别。知道为什么这很时髦并且无法正确显示/渲染吗?

【问题讨论】:

【参考方案1】:

您的应用程序中只能有 1 个路由器。修改类别组件以使用 Switch 而不是 Router:

const Categories = () => (
    <div>
      <ul>
        <li><Link to="/categories/trainers">Trainers</Link></li>
        <li><Link to="/categories/rucksacks">rucksacks</Link></li>
      </ul>

      <Switch>
        <Route path="/categories/trainers" component=Trainers />
        <Route path="/categories/rucksacks" component=Rucksacks />
      </Switch>
    </div>
);

【讨论】:

看起来它想查看完整路径,所以 /categories/trainers: github.com/ReactTraining/react-router/issues/4428

以上是关于React 路由器组件出现然后立即消失的主要内容,如果未能解决你的问题,请参考以下文章

React Router v4 重定向到当前页面,组件消失

反应路由器显示数据

如何在外部 npm 包中使用 React 的 Link 组件而不会出现错误:不变的“你不应该在路由器外部使用链接”

React路由器获取组件外部的当前路由

如何在使用react-router路由的组件中集成错误边界

React路由器参数更改时强制重新安装组件?