wv_wv 2022-01-03 13:27 采纳率: 100%
浏览 77
已结题

React中route组件里没写path还是正常跳转

代码如下,在ProtectedRoute函数return的Route中 {...rest} 应该不包括 path ,但是还是能正常跳转,这是为什么
<ProtectedRoute path="/movies/:id" component={MovieForm} />

const ProtectedRoute = ({ path, component: Component, render, ...rest }) => {
  console.log("rest: ", { ...rest });
  return (
    <Route
      //   path={path}
      {...rest}
      render={(props) => {
        console.log(props);
        if (!auth.getCutterntUser()) return <Redirect to="/login" />;
        return Component ? <Component {...props} /> : render(props);
      }}
    />
  );
};

<Switch>
            <Route path="/register" component={RegisterForm}></Route>
            <Route path="/login" component={LoginForm}></Route>
            <Route path="/logout" component={Logout}></Route>
            <Route path="/movies/1" render={() => <h1>test</h1>} />
            <ProtectedRoute path="/movies/:id" component={MovieForm} />
            <Route
              path="/movies"
              render={(props) => <Movies {...props} user={this.state.user} />}
            ></Route>
            <Route path="/customers" component={Customers}></Route>
            <Route path="/rentals" component={Rentals}></Route>
            <Route path="/not-found" component={NotFound}></Route>
            <Redirect from="/" exact to="/movies" />
            <Redirect to="/not-found" />
</Switch>

  • 写回答

3条回答 默认 最新

  • 归来巨星 前端领域新星创作者 2022-01-04 12:49
    关注

    我现在是一个不使用 Switch标签的情况,不论我是否写入了匹配路由都会呈现在页面上

    img

    如果使用了 Switch 标签进行包裹

    img

    刚刚查阅了几遍博客 总结了一下
    https://segmentfault.com/a/1190000022665185
    https://zhuanlan.zhihu.com/p/142486396

    Switch 的原理是对子组件,也就是 Route 组件从上到下遍历,找到第一个匹配的组件。使用 React.cloneElement 将其返回,更新其中的 computedMatch 为 true, Route 组件读到这个属性后,就知道匹配路径的事情被 Switch 干了,自己的展示组件就好了。

    简单的说 会抓取子组件的内容 而 Switch 的第一顺位子组件是 ProtectedRoute 抓取的其实是这个组件,也就是根据源码

    img

    抓到了 ProtectedRoute 的path 进行了绑定,测试一下将 ProtectedRoute 组件的 path 更改成 path1 效果如下

    img

    这个时候就不会在匹配了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月12日
  • 已采纳回答 1月4日
  • 修改了问题 1月4日
  • 创建了问题 1月3日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助