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 两种

相关推荐
小桥风满袖14 分钟前
极简三分钟ES6 - ES9中for await of
前端·javascript
半花30 分钟前
i18n国际语言化配置
前端
编程贝多芬33 分钟前
Promise 的场景和最佳实践
前端·javascript
Asort35 分钟前
JavaScript 从零开始(四):基础语法详解——从变量声明到数据类型的完全指南
前端·javascript
木木jio37 分钟前
前端大文件分片上传 —— 基于 React 的工程化实现
前端·javascript
南雨北斗40 分钟前
JS的对象属性存储器
前端
Lotzinfly41 分钟前
12个TypeScript奇淫技巧你需要掌握😏😏😏
前端·javascript·面试
一个大苹果42 分钟前
setTimeout延迟超过2^31立即执行?揭秘JavaScript定时器的隐藏边界
javascript
开源之眼1 小时前
React中,useState和useReducer有什么区别
前端
普郎特1 小时前
"不再迷惑!用'血缘关系'彻底搞懂JavaScript原型链机制"
前端·javascript