首页 > 其他分享 >react router v6实现嵌套路由

react router v6实现嵌套路由

时间:2024-03-21 15:47:57浏览次数:21  
标签:dom App react v6 import router 路由

做一个简单的笔记

有两种方式可以实现

  1. 使用标签 BrowserRouter 来实现
  2. 使用API createBrowserRouter 来实现

注意:createBrowserRouter是6.4版本才引入的

这是官方文档

注意,这两个是不兼容的

使用标签 BrowserRouter 来实现

创建路由

// src/router/index.tsx

const router = [
    {
        path: "/",
        element: <div>Home</div>,
    },
    {
        path: "/about",
        element: <div>About</div>,
    },
];

export default router;

在APP组件中引用

// src/App.tsx


import "./assets/App.css";
import { Button, Divider, Flex } from "antd";
import { Link, useRoutes } from "react-router-dom";

import router from "~/router";

const App = () => {
    // 使用useRoutes来使用这个路由
    const route = useRoutes(router);
    return (
        <>
            <Flex gap="small" align="flex-start" vertical={false}>
                <Button type="primary">
                    <Link to="/">首页</Link>
                </Button>
                <Button type="primary">
                    <Link to="/about">关于</Link>
                </Button>
            </Flex>
            <Divider orientation="left">正文</Divider>
            <div>{route}</div>
        </>
    );
};

export default App;

需要什么路由,就在这个组件中导入什么路由,然后,就可以切换了,实现嵌套路由

在入口处使用BrowserRouter标签


import * as React from "react";
import * as ReactDOM from "react-dom/client";
import "~/assets/index.css";
import { BrowserRouter } from "react-router-dom";

import App from "~/App.tsx";

ReactDOM.createRoot(document.getElementById("root")!).render(
    <React.StrictMode>
        <BrowserRouter>
            <App />
        </BrowserRouter>
     </React.StrictMode>,
 );

使用API createBrowserRouter 来实现

在6.4版本引入了 API createBrowserRouter

这个用起来更加优雅

新建路由

// src/router/index.tsx

import { createBrowserRouter } from "react-router-dom";

import App from "~/App.tsx";

const router = createBrowserRouter([
    {
        path: "/",
        element: <App />,
        // 用嵌套路由的形式
        children: [
            {
                // 设置index,表示这个是默认渲染的子路由
                index: true,
                element: <div>Home</div>,
            },
            {
                path: "about",
                element: <div>About</div>,
            },
        ],
    },
]);

export default router;

修改下入口代码

// src/main.tsx

import * as React from "react";
import * as ReactDOM from "react-dom/client";
import "~/assets/index.css";
import { RouterProvider } from "react-router-dom";

import router from "~/router";

ReactDOM.createRoot(document.getElementById("root")!).render(
    <React.StrictMode>
        <RouterProvider router={router} />
    </React.StrictMode>,
);

APP组件不再放在这个位置,这个位置直接注入新建的路由器就好了

在APP组件中使用 Outlet 标签

Outlet 标签就是用来渲染路由器中对应的子路由的位置

import "./assets/App.css";
import { Button, Divider, Flex } from "antd";
import { Link, Outlet } from "react-router-dom";

const App = () => {
    return (
        <>
            <Flex gap="small" align="flex-start" vertical={false}>
                <Button type="primary">
                    <Link to="">首页</Link>
                </Button>
                <Button type="primary">
                    <Link to="about">关于</Link>
                </Button>
            </Flex>
            <Divider orientation="left">正文</Divider>
            <Outlet />
        </>
    );
};

export default App;

标签:dom,App,react,v6,import,router,路由
From: https://www.cnblogs.com/guangdelw/p/18087512

相关文章

  • react router v6报错 useRoutes() may be used only in the context of a <Router> comp
    在使用reactrouterv6版本的时候,按照之前的方法使用src/main.tsx是这样的,几乎不动import*asReactfrom"react";import*asReactDOMfrom"react-dom/client";import"~/assets/index.css";importAppfrom"~/App.tsx";ReactDOM.createRoot(......
  • Angular React Vue 比较 – 模板篇
    如果我们把组件篇比做是前端的JavaScript,那么模板篇则是HTML。三大框架中的模板在应用中呈现用户界面,就像常规HTML一样,但是它具有更多功能。Angular的模板在Angular中,*template* 是HTML的一个块。在模板中我们可以使用Angular的语法来构建更多的功能。编写......
  • IPV6
          ......
  • React函数组件Hook
    问题:相对于类组件,函数组件的编码更简单,效率也更高,但函数组件不能有state(旧版)解决:React16.8版本设计了一套新的语法来让函数组件也可以有stateHook是React16.8的新增特性。它可以让你在不编写class的情况下使用state以及其他的React特性Hook也叫......
  • OSPF-1类Router LSA学习
    前面我们又复习了一遍OSPF概述,在OSPF建立关系后有几种交互报文,通过LSU类型报文包含LSA信息实现路由信息传递,常见了1、2、3、4、5、7类LSA,分别对应不同功能使用。这里先看下1类LSA-RouterLSA。一、LSA概述LSA,全称为LinkStateAdvertisement,即链路状态通告,是OSPF(OpenSho......
  • react 开发一个 类似于条件筛选的组件 如下
     最终效果: 记录一下其中要点: 1.react 的数据被useState后,都不允许直接修改,都需要使用hooks才可以修改       2. useState必须要放到组件渲染函数中     3. 在jsx中不允许使用if 除了三元运算符和isChecked为真假来做标识符外......
  • 前端React篇之React Hook 的理解及实现原理
    目录ReactHook的理解及实现原理实现原理类组件vs函数组件为什么需要HooksReactHooks解决了什么问题案例1.tsx案例2.tsx总结ReactHook的理解及实现原理ReactHook是React16.8引入的新特性,它可以让函数组件拥有类似于class组件中的state和生命周期等特性,以......
  • react的生命周期函数
    react的生命周期函数1.react所有的生命周期函数https://react.docschina.org/docs/react-component.html挂载当组件实例被创建并插入DOM中时,其生命周期调用顺序如下:constructor()staticgetDerivedStateFromProps()render()componentDidMount()更新当组件......
  • react class
    1.(简单了解)类(class)组件的缺点importReact,{Component}from"react";exportdefaultclassButtonextendsComponent{constructor(){super();this.state={buttonText:"Clickme,please"};this.handleClick=this.handleCli......
  • react的基础使用
    1.认识ReactReact是一个用于构建用户界面的JAVASCRIPT库。React起源于Facebook的内部项目,用来架设Instagram的网站,并于2013年5月开源。React拥有较高的性能,代码逻辑非常简单,越来越多的人关注和使用它; 用vite搭建react     npmcreatev......