React:Router-2. createBrowserRouter函数式

参考文档:ReactRouter官网

前边的文章 BrowserRouter组件式路由 提供了组件式路由的方式,在react-router@6.4.0及以上版本,提供了 createBrowserRouter 函数式路由创建方式。

一、创建路由

1. 新建router.js文件,使用createBrowserRouter创建路由
js 复制代码
// router.js
import {createBrowserRouter} from 'react-router-dom';
import Layout from './views/Layout/layout.js';
import About from './views/About/about.js';

const router = createBrowserRouter([
	{
		path: '/',
		component: <Layout />
	},
	{
		path: '/about',
		component: <About />
	},
])

export default router;
2. index.js中 使用RouterProvider 绑定router信息
js 复制代码
// index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import {RouterProvider} from 'react-router-dom';
import router from './router';

ReactDOM.render(
	<React.StrictMode>
		{/* 关键代码:绑定router信息 */}
		<RouterProvider router={router} />
	</React.StrictMode>,
	document.getElementById('app')
)
3. Layout 和 About 组件
js 复制代码
// views/Layout/layout.jsx
export default function Layout() {
    return (
        <div>
            Layout
        </div>
    )
}
js 复制代码
// views/About/about.jsx
function About() {

    return (
        <div>关于</div>
    )
}

export default About;
4. 效果


二、嵌套二级路由

1. 修改router.js文件,在 Layout下嵌套二级菜单
js 复制代码
// router.js
...
const router = createBrowserRouter([
	{
		path: '/',
		component: <Layout />,
		{/* children 设置二级路由 */}
		children: [
            {
                path: '/login',
                element: <Login />
            },
            {
                path: '/info',
                element: <Info/>
            },
        ]
	},
	...
])

export default router;
2. 修改layout.jsx,使用<Outlet> 设置二级路由出口
js 复制代码
// views/Layout/layout.jsx
import { Outlet } from "react-router-dom";

export default function Layout() {
    return (
        <div>
            Layout
            {/* 二级路由出口*/}
            <Outlet />
        </div>
    )
}
3. 新增LoginInfo两个二级路由文件
js 复制代码
// views/Login/login.jsx
import {useSearchParams} from 'react-router-dom';

function Login() {

    // 使用useSearchParams 获取search参数
    const [params] = useSearchParams();
    const id = params.get("id");
    const name = params.get("name");


    return (
        <div>
            Login: 参数为ID:{id}; name: {name}
        </div>
    )
}

export default Login;
js 复制代码
// views/Info/info.jsx


function Info() {

    return (
        <div>关于: 信息</div>
    )
}

export default Info;
4. 效果


三、 路由模式:HistoryHash 两种

相关推荐
子兮曰7 小时前
OpenClaw入门:从零开始搭建你的私有化AI助手
前端·架构·github
吴仰晖7 小时前
使用github copliot chat的源码学习之Chromium Compositor
前端
1024小神7 小时前
github发布pages的几种状态记录
前端
不像程序员的程序媛9 小时前
Nginx日志切分
服务器·前端·nginx
Daniel李华9 小时前
echarts使用案例
android·javascript·echarts
北原_春希9 小时前
如何在Vue3项目中引入并使用Echarts图表
前端·javascript·echarts
JY-HPS9 小时前
echarts天气折线图
javascript·vue.js·echarts
尽意啊9 小时前
echarts树图动态添加子节点
前端·javascript·echarts
吃面必吃蒜9 小时前
echarts 极坐标柱状图 如何定义柱子颜色
前端·javascript·echarts
O_oStayPositive9 小时前
Vue3使用ECharts
前端·javascript·echarts