0

0

如何使用 React Router DOM

王林

王林

发布时间:2024-08-23 15:30:04

|

1111人浏览过

|

来源于dev.to

转载

如何使用 react router dom

介绍

欢迎来到我们关于 react router dom 的深入教程!如果您是一名 ui 开发人员,希望通过动态路由功能增强 react 应用程序,那么您来对地方了。 react router dom 是一个功能强大的库,允许您创建具有多个视图的单页面应用程序,同时保持流畅、无缝的用户体验。

在这份综合指南中,我们将引导您了解有关 react router dom 所需了解的所有内容,从基本概念到高级技术。无论您是 react 新手还是希望提高技能的经验丰富的开发人员,本教程都将为您提供在 react 应用程序中有效实现路由所需的知识和实际示例。

那么,让我们一起深入探索 react router dom 的世界吧!

react router dom 入门

什么是 react router dom?

react router dom 是 react 应用程序的流行路由库。它允许您在单页应用程序 (spa) 中创建动态的客户端路由。使用 react router dom,您可以根据当前 url 轻松管理不同的视图和组件,为您的用户提供无缝的导航体验。

安装 react router dom

开始在 react 应用程序中实现路由之前,我们需要安装 react router dom 包。打开终端并导航到项目目录,然后运行以下命令:

npm install react-router-dom

这将在您的项目中安装最新版本的 react router dom。

基本设置

要开始在应用程序中使用 react router dom,您需要导入必要的组件并使用 browserrouter 组件包装主应用程序组件。以下是如何在 index.js 文件中设置 react router dom 的基本示例:

import react from 'react';
import reactdom from 'react-dom';
import { browserrouter } from 'react-router-dom';
import app from './app';

reactdom.render(
  
    
  ,
  document.getelementbyid('root')
);

现在我们已经完成了基本设置,让我们探索 react router dom 的核心组件以及如何有效地使用它们。

react router dom 的核心组件

路线与路线

路由和路由组件是 react router dom 的构建块。它们允许您定义应为应用程序中的每个路线呈现的不同路径和组件。

这是如何使用这些组件的示例:

import react from 'react';
import { routes, route } from 'react-router-dom';
import home from './components/home';
import about from './components/about';
import contact from './components/contact';

function app() {
  return (
    
      } />
      } />
      } />
    
  );
}

export default app;

在此示例中,我们定义了三个路由:主页(“/”)、关于页面(“/about”)和联系页面(“/contact”)。每个路由都与一个特定的组件相关联,当访问相应的 url 时,该组件将被渲染。

链接组件

link 组件用于在应用程序中创建导航链接。它是 react router dom 的重要组成部分,因为它允许用户在不同视图之间移动,而不会触发整个页面重新加载。

以下是如何使用链接组件:

import react from 'react';
import { link } from 'react-router-dom';

function navigation() {
  return (
    
  );
}

export default navigation;

导航链接组件

navlink 组件与 link 类似,但它提供了用于设置活动链接样式的附加功能。这对于创建要突出显示当前活动页面的导航菜单特别有用。

这是如何使用 navlink 的示例:

import react from 'react';
import { navlink } from 'react-router-dom';

function navigation() {
  return (
    
  );
}

export default navigation;

在此示例中,我们使用 isactive 属性将红色应用于活动链接。

高级路由技术

现在我们已经介绍了基础知识,让我们探索一些可以使用 react router dom 实现的更高级的路由技术。

嵌套路由

嵌套路由允许您在应用程序中创建更复杂的路由结构。这对于使用共享组件创建布局或组织相关路线特别有用。

这是如何实现嵌套路由的示例:

import react from 'react';
import { routes, route, outlet } from 'react-router-dom';
import header from './components/header';
import footer from './components/footer';
import home from './components/home';
import about from './components/about';
import services from './components/services';
import servicedetails from './components/servicedetails';

function layout() {
  return (
    
); } function app() { return ( }> } /> } /> } /> } /> ); } export default app;

在此示例中,我们创建了一个包含页眉和页脚的布局组件。 outlet 组件用于渲染布局内的子路由。

动态路由和 url 参数

动态路线允许您创建可以处理可变路段的灵活路径。这对于需要显示特定项目的详细信息(例如产品页面或用户个人资料)的场景非常有用。

以下是如何使用动态路由和访问 url 参数的示例:

import react from 'react';
import { useparams } from 'react-router-dom';

function productdetails() {
  const { productid } = useparams();

  return (
    

product details

you are viewing product with id: {productid}

); } export default productdetails;

要使用此组件,您需要定义如下路由:

} />

程序化导航

有时您需要根据某些条件或用户操作以编程方式进行导航。 react router dom 为此提供了 usenavigate 钩子。

这是如何使用 usenavigate 的示例:

import react from 'react';
import { usenavigate } from 'react-router-dom';

function loginform() {
  const navigate = usenavigate();

  const handlesubmit = (event) => {
    event.preventdefault();
    // perform login logic here
    // if login is successful, navigate to the dashboard
    navigate('/dashboard');
  };

  return (
    
{/* form fields */}
); } export default loginform;

处理路由参数和查询字符串

react router dom 提供了强大的工具来处理路由参数和查询字符串,允许您创建动态且灵活的路由解决方案。

路由参数

我们已经了解了如何通过 useparams 钩子使用路由参数。让我们通过一个更复杂的示例进一步探讨这一点:

import react from 'react';
import { useparams } from 'react-router-dom';

function blogpost() {
  const { category, postid } = useparams();

  return (
    

blog post

category: {category}

post id: {postid}

); } export default blogpost;

要使用此组件,您需要定义如下路由:

} />

这允许您创建像 /blog/technology/123 或 /blog/travel/456 这样的 url,并从 url 中动态提取类别和帖子 id。

查询字符串

查询字符串对于将可选参数传递给路由非常有用。 react router dom 提供了 usesearchparams 钩子来处理查询字符串。

这是如何使用 usesearchparams 的示例:

import react from 'react';
import { usesearchparams } from 'react-router-dom';

function productlist() {
  const [searchparams, setsearchparams] = usesearchparams();
  const category = searchparams.get('category');
  const sortby = searchparams.get('sortby');

  return (
    

product list

category: {category || 'all'}

sort by: {sortby || 'default'}

); } export default productlist;

在此示例中,我们从查询字符串中读取类别和排序参数。我们还演示了如何使用 setsearchparams 函数更新查询字符串。

保护路由并处理身份验证

许多应用程序中的一个常见要求是根据用户身份验证状态保护某些路由。 react router dom 可以与您的身份验证逻辑结合使用来创建受保护的路由。

这是如何实现受保护路由的示例:

import react from 'react';
import { route, navigate } from 'react-router-dom';

function protectedroute({ element, isauthenticated, ...rest }) {
  return (
    }
    />
  );
}

function app() {
  const [isauthenticated, setisauthenticated] = react.usestate(false);

  return (
    
      } />
      } />
      }
        isauthenticated={isauthenticated}
      />
    
  );
}

export default app;

在此示例中,我们创建了一个 protectedroute 组件来检查用户是否经过身份验证。如果是,则渲染指定的元素;如果没有,它会将他们重定向到登录页面。

处理 404 页面和重定向

react router dom 可以轻松处理 404(未找到)页面并在必要时实现重定向。

404 页

要创建 404 页面,您可以在路由定义末尾使用 * 路径:

import react from 'react';
import { routes, route } from 'react-router-dom';
import home from './components/home';
import about from './components/about';
import notfound from './components/notfound';

function app() {
  return (
    
      } />
      } />
      } />
    
  );
}

export default app;

在此示例中,将为任何与定义的路径不匹配的路线渲染 notfound 组件。

重定向

有时您可能需要将用户从一条路线重定向到另一条路线。 react router dom 为此提供了 navigate 组件:

import react from 'react';
import { routes, route, navigate } from 'react-router-dom';
import home from './components/home';
import oldpage from './components/oldpage';
import newpage from './components/newpage';

function app() {
  return (
    
      } />
      } />
      } />
    
  );
}

export default app;

在此示例中,任何尝试访问 /old-page 的用户都会自动重定向到 /new-page。

通过代码分割优化性能

随着应用程序的增长,您可能希望实现代码分割以提高性能。 react router dom 与 react 的延迟加载功能配合得很好,允许您仅在需要时加载路由组件。

以下是如何使用 react router dom 实现代码分割的示例:

import React, { Suspense, lazy } from 'react';
import { Routes, Route } from 'react-router-dom';

const Home = lazy(() => import('./components/Home'));
const About = lazy(() => import('./components/About'));
const Contact = lazy(() => import('./components/Contact'));

function App() {
  return (
    Loading...
}> } /> } /> } /> ); } export default App; In this example, we're using React's `lazy` function to dynamically import our components. The `Suspense` component is used to show a loading indicator while the component is being loaded.

结论

恭喜!您现在已经完成了有关 react router dom 的综合教程。我们涵盖了从基本设置到嵌套路由、动态路由、身份验证和代码分割等高级技术的所有内容。有了这些知识,您就可以在 react 应用程序中实现强大的路由解决方案了。

记住,掌握 react router dom 的关键是练习。尝试在您自己的项目中实现这些概念,并且不要害怕尝试不同的路由结构和技术。随着您对 react router dom 越来越熟悉,您会发现它为创建动态且用户友好的 web 应用程序开辟了新的可能性。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1497

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

623

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

592

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

587

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

170

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

82

2025.08.07

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

25

2026.01.26

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
nginx浅谈
nginx浅谈

共15课时 | 0.8万人学习

前端开发(基础+实战项目合集)
前端开发(基础+实战项目合集)

共60课时 | 3.9万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号