讲师中心 微信公众号
AI工具推荐 视频效率加速

了解具有正确路由的 React Outlet

浅伟同学_8129

浅伟同学_8129

发布时间:2024-10-20 08:06:17

|

657人浏览过

|

来源于dev.to

转载

了解具有正确路由的 react outlet

本文将探讨 react 出口的功能以及 react 应用程序中的路由基础知识。首先也是最重要的,我们需要了解路由的基础知识

了解基础知识

在深入研究之前,让我们确保我们对 react router 有深入的了解。

  • 什么是 react router? ​​react router 是一个流行的 javascript 库,可以在 react 应用程序中的不同视图之间进行导航。它允许您定义路由,将 url 映射到特定组件。更多..

  • 为什么路由很重要?路由对于构建单页应用程序 (spa) 至关重要,用户无需重新加载整页即可导航,从而创建更流畅、更动态的体验。

现在让我们深入了解 react outlet

什么是 react outlet?

组件是父路由组件中的占位符,它告诉 react router 在哪里渲染子路由。它就像一个动态容器,根据当前 url 更改其内容。
此功能有助于管理复杂的布局,其中页面的一部分保持一致,例如标题或侧边栏,而其他部分则根据路线动态变化。

它是如何工作的:当 url 与父路由匹配时,react router 会在该父组件中查找 。然后它将匹配的子路由的组件渲染到 中。

让我们为 react 应用程序使用正确的 react 路由来实现 outlet

import react from "react";

// import components
import allroutes from "./routes";

// component
const app = () => {
  return (
    <>

      <allroutes />
    </>
  );
};
export default app;

这个allroutes组件使用react-router-dom为react应用程序定义了一个路由系统,它处理react web应用程序中不同页面之间的导航。这是代码的详细分解

// import packages

import { browserrouter, outlet, route, routes } from "react-router-dom";
import react, { suspense, lazy } from "react";
import {
  dashboard,
  homepath,
  loginpath,
  rootpath
} from "./routepaths";

import loader from "../components/loader";
import protectedroute from "./protectedroute";

// import route paths

const logincomponent = lazy(() => import("../pages/login"));
const homecomponent = lazy(() => import("../pages/home"));
const routenotfoundcomponent = lazy(() => import("../pages/pagenotfound"));

const dashboardcomponent = lazy(() => import("../pages/dashboard/"));

const allroutescomponent = () => {
  return (
    <suspense fallback={<loader />}>
      <browserrouter>
        <routes>
          <route path={rootpath} element={<outlet />}>
            <route index element={<logincomponent />} />
            <route path={loginpath} element={<logincomponent />} />
            <route element={<protectedroute />}>
              <route path={homepath} element={<homecomponent />} />
              <route path={dashboard} element={<dashboardcomponent />} />
            </route>
            <route path="*" element={<routenotfoundcomponent />} />
          </route>
        </routes>
      </browserrouter>
    </suspense>
  );
};

export default allroutescomponent;

导入包

browserrouter:该组件支持在浏览器中进行路由。它使用 html5 历史 api 来保持 ui 与 url 同步。
outlet、route、routes:这些组件定义和处理应用程序中的各种路由(或页面)。
suspense:suspense 用于处理延迟加载的组件。它在加载组件时显示后备组件(在本例中为自定义加载器)。
惰性:此函数仅在需要时才延迟加载组件,从而实现代码分割,通过减少初始包大小来提高应用程序的性能。
加载器:这是一个自定义组件,在延迟加载组件时显示加载指示器。
protectedroute:此自定义组件可确保某些路由只能由授权用户访问,从而增强安全性。
根路由(/):该路由用于我们应用程序的根路径。它呈现登录组件。

导入路线

应用程序从单独的文件 (routepaths) 导入预定义路径(例如仪表板、homepath、loginpath、rootpath)。这使得代码更容易维护,并避免在组件内硬编码路由路径。

在 allroutescomponent 中定义路由

主函数 allroutescomponent 定义了如何处理应用程序中的不同路由:
:包装路由结构并管理浏览器导航。
:该组件保存应用程序的所有定义的路由。
:定义单个路由。 path 属性定义 url 模式,element 属性指定要为该路由渲染的组件。

jQuery网页图片延迟加载代码
jQuery网页图片延迟加载代码

jQuery网页图片延迟加载代码基于jquery-1.8.3.min.js制作,实现图片预加载效果,代码附详细中文注释,使用方便。

下载
  • 根 (rootpath) 路由充当子路由的容器。

  • 当用户访问 / 路径时,索引路由默认渲染 logincomponent。

  • /login 路径也会渲染 logincomponent。

  • 像 /home 和 /dashboard 这样的路由被包装在 protectedroute 组件中,确保只有授权用户才能访问这些页面。

:这允许渲染嵌套路由。任何子路由(如 /login、/home)都会在父路由 (rootpath) 内呈现。

受保护的路线有哪些?

一些路由(如 homepath 和仪表板)嵌套在 protectedroute 元素内。这意味着用户必须满足某些条件(例如登录)才能访问这些页面。如果用户未经授权,protectedroute 组件通常会将其重定向到登录页面或错误页面。
这是受保护路线的代码

// import packages
import react, { useeffect } from "react";
import { usenavigate, outlet } from "react-router-dom";

import baselayout from "../pages/layout";

// import route paths
import { rootpath } from "./routepaths";

// component
const protectedroute = () => {
  const navigate = usenavigate();();
  const isauthenticated = false; //add a dynamic method call
  const user = 'shruti';//add a dynamic method call

  useeffect(() => {
    if (!isauthenticated) {
      return navigate(rootpath, { replace: true });
    }
  }, [isauthenticated, navigate]);

  return (
    <baselayout >
      <outlet />
    </baselayout>
  );
};

export default protectedroute;

代码说明

  • 导入包

react, { useeffect }:react 是构建 ui 的核心包,useeffect 是在功能组件中运行副作用的钩子。这里,useeffect 用于处理用户未通过身份验证时的重定向。
usenavigate:react-router-dom 中的这个钩子可以实现编程导航。它用于在用户未经身份验证时重定向用户。
outlet:这是受保护路由内嵌套路由的占位符。它允许动态渲染子路由。
baselayout:该组件用布局包装受保护的路由,为受保护的页面提供一致的外观和结构。

  • 组件定义

usenavigate():这个钩子允许导航到不同的路线。在本例中,如果用户未经过身份验证,它用于导航到 rootpath。
isauthenticated 和 user:这些值目前是硬编码的,但可以动态设置,通常通过从全局状态或上下文检查某些身份验证状态(如 jwt 令牌、会话数据等)。
isauthenticated:确定用户是否通过身份验证的标志。如果为 false,则用户将被重定向。
user:当前登录的用户。该值可以从上下文或全局状态动态检索,但目前,它是一个硬编码字符串('shruti')。

useeffect:只要经过身份验证或导航更改,useeffect 挂钩就会运行。
在 useeffect 内部,代码检查用户是否经过身份验证。如果没有(!已通过身份验证),则使用导航功能将用户重定向到根路径。
{ replace: true } 选项可防止将重定向添加到浏览器的历史记录中,这意味着用户将无法导航回受保护的页面。

现在让我们深入了解 baselayout 组件代码

import React, { lazy } from "react";

import ErrorBoundary from "../../components/error-boundary";

// const Header = lazy(() => import("@components/header"));
const Sidebar = lazy(() => import("../../components/sidebar"));
export default function BaseLayout(props) {
  const { children } = props;
  // common things we need to show on each page like Header,sidebar ,Footer
  return (
    <ErrorBoundary>
      <div className="wrapper">
        <div className="d-flex position-relative">
          <Sidebar />
          <main className="main-container">
            {/* <Header /> */}
            {children}//components from all routes
          </main>
        </div>
      </div>
    </ErrorBoundary>
  );
}

BaseLayout.defaultProps = {
  children: [],
  user: {},

baselayout 组件充当我们应用程序中所有页面的通用布局结构。
它包含侧边栏和主要内容区域等常见元素。
来自不同路由的子组件使用主内容区域内的 outlet 组件进行渲染。

试试这篇文章,用routeroutlet实现延迟加载路由

结论

react 中使用 outlet 进行延迟加载路由是通过减少应用程序的初始加载时间来优化性能的强大方法。通过使用 react.lazy() 和 suspense,您可以确保仅在需要时加载组件,而 outlet 组件则允许高效的嵌套路由。与受保护路由的使用相结合,此方法提供了一个模块化、可扩展且性能友好的结构,用于管理应用程序中的路由。

就是这样!

尝试一下,并在评论中告诉我你的想法!

相关文章

路由优化大师
路由优化大师

路由优化大师是一款及简单的路由器设置管理软件,其主要功能是一键设置优化路由、屏广告、防蹭网、路由器全面检测及高级设置等,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

4511

2023.10.23

HTML与HTML5的区别
HTML与HTML5的区别

HTML与HTML5的区别:1、html5支持矢量图形,html本身不支持;2、html5中可临时存储数据,html不行;3、html5新增了许多控件;4、html本身不支持音频和视频,html5支持;5、html无法处理不准确的语法,html5能够处理等等。想了解更多HTML与HTML5的相关内容,可以阅读本专题下面的文章。

7948

2024.03.06

html5从入门到精通汇总
html5从入门到精通汇总

想系统掌握HTML5开发?本合集精选全网优质学习资源,涵盖免费教程、实战项目、视频课程与权威电子书,从基础语法到高级特性(Canvas、本地存储、响应式布局等)一应俱全,适合零基础小白到进阶开发者,助你高效入门并精通HTML5前端开发。

854

2025.12.30

html5新老标签汇总
html5新老标签汇总

HTML5在2026年持续优化网页语义化与交互体验,不仅引入了如<header>、<nav>、<article>、<section>、<aside>、<footer>等结构化标签,还新增了<video>、<audio>、<canvas>、<figure>、<time>、<mark>等增强多媒体与

734

2025.12.30

html5空格代码怎么写
html5空格代码怎么写

在HTML5中,空格不能直接通过键盘空格键实现,需使用特定代码。本合集详解常用空格写法:&nbsp;(不间断空格)、&ensp;(半个中文空格)、&emsp;(一个中文空格)及CSS的white-space属性等方法,帮助开发者精准控制页面排版,避免因空格失效导致布局错乱,适用于新手入门与实战参考。

393

2025.12.30

html5怎么做网站教程
html5怎么做网站教程

想从零开始学做网站?这份《HTML5怎么做网站教程》合集专为新手打造!涵盖HTML5基础语法、页面结构搭建、表单与多媒体嵌入、响应式布局及与CSS3/JavaScript协同开发等核心内容。无需编程基础,手把手教你用纯HTML5创建美观、兼容、移动端友好的现代网页。附实战案例+代码模板,快速上手,轻松迈出Web开发第一步!

521

2025.12.31

HTML5建模教程
HTML5建模教程

想快速掌握HTML5模板搭建?本合集汇集实用HTML5建模教程,从零基础入门到实战开发全覆盖!内容涵盖响应式布局、语义化标签、Canvas绘图、表单验证及移动端适配等核心技能,提供可直接复用的模板结构与代码示例。无需复杂配置,助你高效构建现代网页,轻松上手前端开发!

358

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

621

2025.12.31

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React中文开发手册
React中文开发手册

共0课时 | 1人学习

React 路由精讲视频教程
React 路由精讲视频教程

共10课时 | 2.6万人学习

React.JS中文基础视频教程
React.JS中文基础视频教程

共14课时 | 3.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn