当前位置: 首页 > 知识库问答 >
问题:

React Router-404页面由于自定义路由组件而始终显示

龙哲
2023-03-14

我有一个组件,它采用与标准react路由器类似的道具路由,并返回路由。此返回路线有一个渲染道具,该道具仅通过组件,但添加了导航组件。此自定义NavRoute不适用于react routerSwitch组件,因为当我在交换机内使用自定义组件以及catch all 404页面时,该页面始终显示。

如何使404组件只显示如果没有其他路由匹配的url?

导航路线

const NavRoute = ({ exact, path, component: Component }) => {
  return (
    <Route exact={exact} path={path} render={(props) => (
      <div style={styleSideNav}>
        <Nav />
        <Component {...props} />
      </div>
    )}/>
  );
});

用法

  <Switch>
    <NavRoute exact path="/" component={Home} />
    <NavRoute exact path="/about" component={About} />
    <Route path="/" component={Page404} />
  </Switch>

编辑:完整示例的Codesandbox: codesandobx的https://codesandbox.io/s/react-router-stack-overflow-5jcumURL:https://5jcum.csb.app/invite/abc

共有1个答案

通安宁
2023-03-14

开关只与直接在它下面的第一层组件一起工作。它不能穿越整棵树。

https://github.com/ReactTraining/react-router/issues/5785#issuecomment-351067856

为了解决这个问题,我们可以传递路由数组,而不是包在片段中的路由。我已经在codesandbox中进行了更改和更新。

https://codesandbox.io/s/react-router-stack-overflow-hu62w?file=/src/App.js

 类似资料:
  • 在Swoole::$php->runMVC() 调用之前可以修改默认的路由函数。 Swoole::$php->router(function(){ return array('controller' => 'YourController', 'view' => 'YourView'); }); Swoole::$php->runMVC(); 设置后将使用制定的函数作为路由,路由函数务必要

  • phpGrace 追求极致的效率,我们并不认同在url的基础上继续进行复杂的正则匹配是一种高效的、明智的选择!方便的调用规则比不上轻快的效率!所以我们并不建议您使用复杂的路由规则!尽管如此为了满足开发者的需求和习惯我们还是开放了简单路由!在入口页开启路由配置 <?php define('PG_ROUTE', true);//在框架核心文件引用前定义 include 'phpGrace/phpGra

  • 英文原文: http://emberjs.com/guides/routing/defining-your-routes/ 当启动你的应用时,路由器会负责展示模板,载入数据,以及设置应用状态等任务。 这些都是通过将当前的URL与你定义的路由进行匹配来实现的。 1 2 3 4 App.Router.map(function() { this.route("about", { path: "/a

  • 例如:产品详细信息页面可能有一个标签式导航部分,默认显示产品概述。 当用户单击“技术规格”选项卡时,该部分将显示规格。 如果用户点击ID为3的产品,我们要显示产品详细信息页面,其中包含概述: 当用户点击 “Technical Specs”: localhost:3000/product-details/3/specs overview 和 specs 作为 product-details/:id的

  • SOFARPC 中对服务地址的选择也抽象为了一条处理链,由每一个 Router 进行处理。同 Filter 一样, SOFARPC 对 Router 提供了同样的扩展能力。 @Extension(value = "customerRouter") @AutoActive(consumerSide = true) public class CustomerRouter extends Router

  • 注册路由规则 route目录下的任何路由定义文件都是有效的,默认的路由定义文件是route.php,但你完全可以更改文件名,或者添加多个路由定义文件(你可以进行模块定义区分,但最终都会一起加载)。 ├─route 路由定义目录 │ ├─route.php 路由定义 │ ├─api.php 路由定义 │ └─...