当前位置: 首页> 健康> 养生 > React@16.x(40)路由v5.x(5)常见应用场景(2)- 实现类似 vue 的路由模式

React@16.x(40)路由v5.x(5)常见应用场景(2)- 实现类似 vue 的路由模式

时间:2025/8/27 10:26:32来源:https://blog.csdn.net/qq_40147756/article/details/139883480 浏览次数:0次

目录

  • 1,vue-router
  • 2,React 模拟实现

1,vue-router

vue 的路由配置文件,

// src/router/index.ts
const routes = [{path: "/news",children: [{ path: "", component: NewsView },{ path: "detail", component: NewsDetail },{ path: "search", component: NewsSearch },],},{path: "/goods",component: GoodsView,children: [{ path: "detail", component: GoodsDetail },{ path: "search", component: GoodsSearch },],},{ path: "/", component: HomeView },
];

App.vue 中使用 RouterView 即可渲染匹配到的路由:

<template><RouterView></RouterView>
</template>

另外,注意 newsgoods 路由的区别:

  • news 相关的3个路由页面是相互独立的,只是逻辑上有关系。
  • goods 路由的写法,需要在 GoodsView 组件内也使用 RouterView 才能访问到路由 goods/detailgoods/search 对应的页面。
<template><div>goods主页面</div><RouterView></RouterView>
</template>

2,React 模拟实现

使用和 vue 相同的配置文件routeConfig.js

App.jsx

import { BrowserRouter as Router, Switch, Link } from "react-router-dom";
import RootRoute from "./RootRoute";export default function App() {return (<Router><Link to="/">首页</Link><Link to="/news">新闻页</Link><Link to="/goods">商品页</Link><Switch><RootRoute></RootRoute></Switch></Router>);
}

关键实现:RootRoute.js

import React from "react";
import { Route } from "react-router-dom";
import routeConfig from "./routeConfig";export default function RootRoute() {return getRoutes(routeConfig, "");
}function getRoutes(routes, basePath) {if (!Array.isArray(routes)) {return null;}return routes.map((route) => {const { path, component: Component, children, ...rest } = route;const newPath = `${basePath}${path}`;// 适配 news 路由的方式if (Component) {return (<Routekey={newPath}path={newPath}exact={["", "/"].includes(path)}{...rest}render={(values) => {return <Component {...values}>{getRoutes(children, newPath)}</Component>;}}></Route>);} else {return getRoutes(children, newPath);}});
}

News.jsx

export default function News() {return (<div><div>News页面</div><Link to="/news/detail">详情</Link><Link to="/news/search">查询</Link></div>);
}

Goods.jsx,其中 props.childrenRootRoute.js 遍历子路由渲染出对应的 <Route> 组件。

export default function Goods(props) {return (<div><div>Goods页面</div><Link to="/goods/detail">goods详情</Link><Link to="/goods/search">goods查询</Link><div>{props.children}</div></div>);
}

效果:

在这里插入图片描述


以上。

关键字:React@16.x(40)路由v5.x(5)常见应用场景(2)- 实现类似 vue 的路由模式

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: