React:Router-2. createBrowserRouter函数式

参考文档:ReactRouter官网

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

一、创建路由

1. 新建router.js文件,使用createBrowserRouter创建路由
// 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信息
// 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 组件
// views/Layout/layout.jsx
export default function Layout() {
    return (
        <div>
            Layout
        </div>
    )
}
// views/About/about.jsx
function About() {

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

export default About;
4. 效果

在这里插入图片描述
在这里插入图片描述

二、嵌套二级路由

1. 修改router.js文件,在 Layout下嵌套二级菜单
// 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> 设置二级路由出口
// views/Layout/layout.jsx
import { Outlet } from "react-router-dom";

export default function Layout() {
    return (
        <div>
            Layout
            {/* 二级路由出口*/}
            <Outlet />
        </div>
    )
}
3. 新增LoginInfo两个二级路由文件
// 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;

// views/Info/info.jsx


function Info() {

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

export default Info;
4. 效果

在这里插入图片描述
在这里插入图片描述

三、 路由模式:HistoryHash 两种

在这里插入图片描述

相关推荐

  1. 函数编程

    2024-05-10 10:22:09       57 阅读
  2. Kotlin函数接口

    2024-05-10 10:22:09       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-10 10:22:09       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-10 10:22:09       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-10 10:22:09       87 阅读
  4. Python语言-面向对象

    2024-05-10 10:22:09       96 阅读

热门阅读

  1. Leetcode刷题

    2024-05-10 10:22:09       35 阅读
  2. Markdown使用说明

    2024-05-10 10:22:09       29 阅读
  3. mvn package includes all the dependency jar in pom.xml

    2024-05-10 10:22:09       38 阅读
  4. Lua 零基础入门

    2024-05-10 10:22:09       28 阅读
  5. GIT SSL certificate problem

    2024-05-10 10:22:09       34 阅读
  6. C#中的引用参数

    2024-05-10 10:22:09       32 阅读