React:Router-2. createBrowserRouter函数式

参考文档:ReactRouter官网

前边的文章 BrowserRouter组件式路由 提供了组件式路由的方式,在[email protected]及以上版本,提供了 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 两种

相关推荐
沙尘暴炒饭1 分钟前
vuex持久化vuex-persistedstate,存储的数据刷新页面后导致数据丢失
开发语言·前端·javascript
2401_837088504 分钟前
CSS清楚默认样式
前端·javascript·css
zwjapple15 分钟前
React 的 useEffect 清理函数详解
前端·react.js·前端框架
Jewel10525 分钟前
如何配置Telegram Mini-App?
前端·vue.js·app
s11show_1631 小时前
hz修改后台新增keyword功能
android·java·前端
二个半engineer1 小时前
Web常见攻击方式及防御措施
前端
co松柏1 小时前
程序员必备——AI 画技术图技巧
前端·后端·ai编程
前端大白话1 小时前
前端人速码!10个TypeScript神仙技巧,看完直接拿捏项目实战
前端·javascript·typescript
五号厂房1 小时前
React 异步回调中产生的闭包问题剖析及解决
前端
用户2031196600961 小时前
GeometryProxy 和 GeometryReader 的区别
前端