返回顶部
首页 > 资讯 > 精选 >react如何实现多个页面之间跳转
  • 627
分享到

react如何实现多个页面之间跳转

2023-07-04 23:07:45 627人浏览 八月长安
摘要

本文小编为大家详细介绍“React如何实现多个页面之间跳转”,内容详细,步骤清晰,细节处理妥当,希望这篇“react如何实现多个页面之间跳转”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。react多个页面之间跳转

本文小编为大家详细介绍“React如何实现多个页面之间跳转”,内容详细,步骤清晰,细节处理妥当,希望这篇“react如何实现多个页面之间跳转”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

react多个页面之间跳转的实现方法:1、引入“React-Router”;2、在Home页面用Link加上跳转到其他页面的链接;3、将多个路由放在一个文件并导出多个数组即可。

react 多页面跳转、使用React-Router实现前端路由鉴权

React-Router是React生态里面很重要的一环,现在React的单页应用的路由基本都是前端自己管理的,而不像以前是后端路由,React管理路由的库常用的就是就是React-Router。本文想写一下React-Router的使用,但是光介绍api又太平淡了,而且官方文档已经写得很好了,我这里就用一个常见的开发场景来看看React-Router是怎么用的吧。而我们一般的系统都会有用户访问权限的限制,某些页面可能需要用户具有一定的权限才能访问。本文就是用React-Router来实现一个前端鉴权模型。

应用示例

本文要实现的功能是大家经常遇到的场景,就是要控制不同的用户角色来访问不同的页面,这里总共有四个页面:

/index
/login
/backend
/admin

另外还有三种角色:

  • 未登录用户 :只能访问网站首页 /index 和登录页 /login

  • 普通用户 :可以访问网站首页 /index ,登录页 /login 和后台页面 /backend

  • 管理员 :可以访问管理页面 /admin 和其他所有页面

引入React-Router

要实现路由鉴权,我们还得一步一步来,我们先用React-Router搭建一个简单的带有这几个页面的项目。我们直接用 create-react-app 创建一个新项目,然后建了一个 pages 文件夹,里面放入我们前面说的那几个页面:

react如何实现多个页面之间跳转

我们页面先写简单点,先写个标题吧,比如这样:

import React from 'react';

function Admin() {
 return (
   <h2>管理员页面</h2>
 );
}

其他几个页面也是类似的。

然后我们就可以在App.js里面引入React-Router做路由跳转了,注意我们在浏览器上使用的是react-router-dom,新版的React-Router将核心逻辑层和展示层分开了,核心逻辑会处理路由匹配等,展示层会处理实际的跳转和路由变化的监听,之所以这么分,是因为React-Router不仅仅需要支持浏览器,还需要支持React Native,这两个平台的监听和跳转是不一样的,所以现在React-Router下面有好几个包了:

react-router :核心逻辑处理,提供一些公用的基类

react-router-dom :具体实现浏览器相关的路由监听和跳转

react-router-native :具体实现RN相关的路由监听和跳转

在实际使用时,我们一般不需要引用 react-router ,而是直接用 react-router-dom 就行,因为它自己会去引用 react-router 。下面我们在项目里面引入 react-router-dom

import React from 'react';
import {
 BrowserRouter as Router,
 Switch,
 Route,
} from "react-router-dom";
import Home from './pages/Home';
import Login from './pages/Login';
import Backend from './pages/Backend';
import Admin from './pages/Admin';

function App() {
 return (
   <Router>
     <Switch>
       <Route path="/login" component={Login}/>
       <Route path="/backend" component={Backend}/>
       <Route path="/admin" component={Admin}/>
       <Route path="/" component={Home}/>
     </Switch>
   </Router>
 );
}

export default App;

然后可以在 Home 页面用 Link 加上跳转到其他页面的链接,这样就可以跳转了:

import React from 'react';
import { Link } from 'react-router-dom';

function Home() {
 return (
   <>
     <h2>首页</h2>
     <ul>
       <li><Link to="/login">登录</Link></li>
       <li><Link to="/backend">后台</Link></li>
       <li><Link to="/admin">管理员</Link></li>
     </ul>
   </>
 );
}

export default Home;

到现在我们的应用运行起来是这样的:

react如何实现多个页面之间跳转

模块划分

虽然我们的跳转实现了,但是所有人都可以访问任何页面,我们前面的需求是要根据登录的角色限制访问的页面的,在写代码前,我们先来思考下应该怎么做这个。当然最直观最简单的方法就是每个页面都检测下当前用户的角色,匹配不上就报错或者跳回首页。我们现在只有几个页面,这样做好像也还好,但是如果我们的应用变大了,页面变多了,每个页面都来一次检测就显得很重复了,所以我们应该换个角度来思考这个问题。

仔细一看,其实我们总共就三种角色,对应三种不同的权限,这三个权限还有层级关系,高级别的权限包含了低级别的权限,所以我们的页面也可以按照这些权限分为三种:

公共页面
普通页面
管理员页面

为了好管理这三种页面,我们可以将他们抽取成三个文件,放到一个独立的文件夹 routes 里面,三个文件分别命名为 publicRoutes.jsprivateRoutes.jsadminRoutes.js

react如何实现多个页面之间跳转

对于每个路由文件,我们可以将这类路由组织成数组,然后 export 出去给外面调用,比如 publicRoutes.js

import Login from '../pages';
import Home from '../pages/Home';

const publicRoutes = [
 {
   path: '/login',
   component: Login,
   exact: true,
 },
 {
   path: '/',
   component: Home,
   exact: true,
 },
];

export default publicRoutes;

然后我们外面使用的地方直接改为:

import publicRoutes from './routes/publicRoutes';

function App() {
 return (
   <Router>
     <Switch>
       {publicRoutes.map(
         ({path, component, ...routes}) =>
           <Route key={path} path={path} component={component} {...routes}/>
       )}
       <Route path="/backend" component={Backend}/>
       <Route path="/admin" component={Admin}/>
     </Switch>
   </Router>
 );
}

这样我们的 App.js 里面就不会有冗长的路由路由列表了,而是只需要循环一个数组就行了。但是对于需要登录才能访问的页面和管理员页面我们不能直接渲染 Route 组件,我们最好再封装一个高级组件,将鉴权的工作放到这个组件里面去,这样我们普通的页面在实现时就不需要关心怎么鉴权了。

封装高级组件

要封装这个鉴权组件思路也很简单,前面我们将 publicRoutes 直接拿来循环渲染了 Route 组件,我们的鉴权组件只需要在这个基础上再加一个逻辑就行了:在渲染真正的 Route 组件前先检查一下当前用户是否有对应的权限,如果有就直接渲染 Route 组件,如果没有就返回某个页面,可以是登录页或者后台首页,具体根据自己项目需求来。所以我们的路由配置文件 privateRoutes.jsadminRoutes.js 里面的路由会比 publicRoutes.js 的多两个参数:

// privateRoutes.js
import Backend from '../pages/Backend';

const privateRoutes = [
 {
   path: '/backend',
   component: Backend,
   exact: true,
   role: 'user',       // 当前路由需要的角色权限
   backUrl: '/login'   // 不满足权限跳转的路由
 },
];

export default privateRoutes;

adminRoutes.js 是类似的写法:

// adminRoutes.js
import Admin from '../pages/Admin';

const adminRoutes = [
 {
   path: '/admin',
   component: Admin,
   exact: true,
   role: 'admin',       // 需要的权限是admin
   backUrl: '/backend'  // 不满足权限跳回后台页面
 },
];

export default adminRoutes;

然后就可以写我们的高级组件了,我们将它命名为 AuthRoute 吧,注意我们这里假设的用户登录时后端API会返回给我们当前用户的角色,一个用户可能有多个角色,比如普通用户的角色是 ['user'] ,管理员的角色是 ['user', 'admin'] ,具体的权限验证逻辑要看自己项目权限的设计,这里只是一个例子:

// AuthRoute.js
import React from 'react';
import { Route, Redirect } from 'react-router-dom';

function AuthRoute(props) {
 const {
   user: {
     role: userRole
   },
   role: routeRole,
   backUrl,
   ...otherProps
 } = props;

 // 如果用户有权限,就渲染对应的路由
 if (userRole && userRole.indexOf(routeRole) > -1) {
   return <Route {...otherProps} />
 } else {
   // 如果没有权限,返回配置的默认路由
   return <Redirect to={backUrl} />
 }
}

export default AuthRoute;

然后用我们的 AuthRoute 的渲染 adminRoutesprivateRoutes :

// ... 省略其他代码 ...

{privateRoutes.map(
 (route) => <AuthRoute key={route.path} {...route}/>
)}
{adminRoutes.map(
 (route) => <AuthRoute key={route.path} {...route}/>
)}

登录设置权限

在我们的 AuthRoute 里面用到了 user: { role } 这个变量,但是我们还没设置它。真实项目中一般是登录的时候后端API会返回当前用户的角色,然后前端将这个权限信息保存在一些状态管理工具里面,比如 Redux 。我们这里直接在 Login 页面写死两个按钮来模拟这个权限了,用户的配置就用根组件的 state 来管理了, Login 页面的两个按钮会改变对应的 state

import React from 'react';
import { Link } from 'react-router-dom';

function Login(props) {
 const {loginAsUser, loginAsAdmin, history} = props;

 const userLoginHandler = () => {
   loginAsUser();      // 调用父级方法设置用户权限
   history.replace('/backend');     // 登录后跳转后台页面
 }

 const adminLoginHandler = () => {
   loginAsAdmin();     // 调用父级方法设置管理员权限
   history.replace('/admin');     // 登录后跳转管理员页面
 }

 return (
   <>
     <h2>登录页</h2>
     <button onClick={userLoginHandler}>普通用户登录</button>
     <br/><br/>
     <button onClick={adminLoginHandler}>管理员登录</button>
     <br/><br/>
     <Link to="/">回首页</Link>
   </>
 );
}

export default Login;

到这里我们这个简单的路由鉴权就完成了,具体跑起来效果如下:

react如何实现多个页面之间跳转

读到这里,这篇“react如何实现多个页面之间跳转”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: react如何实现多个页面之间跳转

本文链接: https://lsjlt.com/news/347975.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • react如何实现多个页面之间跳转
    本文小编为大家详细介绍“react如何实现多个页面之间跳转”,内容详细,步骤清晰,细节处理妥当,希望这篇“react如何实现多个页面之间跳转”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。react多个页面之间跳转...
    99+
    2023-07-04
  • react 多个页面之间跳转怎么实现
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react 多个页面之间跳转怎么实现?react 多页面跳转、使用React-Router实现前端路由鉴权React-Router是React生态里面很重...
    99+
    2023-05-14
    React
  • react如何实现跳转页面
    这篇文章主要介绍“react如何实现跳转页面”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“react如何实现跳转页面”文章能帮助大家解决问题。react实现跳转页面的方法:1、通过“import {...
    99+
    2023-07-04
  • react如何实现页面组件跳转
    这篇文章主要介绍了react如何实现页面组件跳转,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 跳转方法:1、利...
    99+
    2024-04-02
  • react如何实现跳转到新页面
    今天小编给大家分享一下react如何实现跳转到新页面的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。react实现跳转到新页面...
    99+
    2023-07-04
  • react如何实现页面跳转不记录
    今天小编给大家分享一下react如何实现页面跳转不记录的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。react实现页面跳转不...
    99+
    2023-07-04
  • vue如何实现本项目页面之间跳转
    目录本项目页面之间跳转方式在template模板中添加在methods中写入路径修改路由文件vue解决页面跳转问题解决办法本项目页面之间跳转方式 在template模板中添加 but...
    99+
    2024-04-02
  • react怎么实现跳转页面
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react怎么实现跳转页面?react项目实现页面跳转更新:useNavigate()的使用import { useNavigate } from ...
    99+
    2023-05-14
    React
  • react如何实现跳转前记住页面状态
    这篇文章主要介绍了react如何实现跳转前记住页面状态的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇react如何实现跳转前记住页面状态文章都会有所收获,下面我们一起来看看吧。react实现跳转前记住页面状态的...
    99+
    2023-07-04
  • PHP页面跳转教程:如何实现页面跳转到新页面
    标题:PHP页面跳转教程:如何实现页面跳转到新页面,需要具体代码示例 在Web开发中,页面跳转是一个常见的操作,通过页面跳转可以实现用户在不同页面间进行流畅的切换,提升用户体验和网站功...
    99+
    2024-03-04
    教程 php 页面跳转 a标签
  • react 怎么实现跳转到新页面
    本教程操作环境:Windows10系统、react18版、Dell G3电脑。react 怎么实现跳转到新页面?react 点击跳转新页面跳转方法:在前端的实战开发中我们需要用到框架的地方是比较广泛的,今天我们就来说说在“react 怎么点...
    99+
    2023-05-14
    React
  • jquery实现登陆跳转页面跳转页面跳转
    在Web开发中,很常见的一种需求是用户通过输入账号和密码完成登陆操作后,跳转到不同的页面。这一过程中需要用到Javascript库中非常流行的jQuery来实现。jQuery是一个快速、简洁的JavaScript库,其设计思想是“写更少,做...
    99+
    2023-05-25
  • java如何实现页面跳转
    页面标签前端js(推荐视频教程:java视频教程)window.location.href = "https://www.yht7.com/news/index.html"页面转发前端实际只发送一次请求,后端两次请求共用request和re...
    99+
    2016-02-02
    java教程 java 实现 页面 跳转
  • php如何实现页面跳转
    这篇文章将为大家详细讲解有关php如何实现页面跳转,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php实现页面的三种跳转方法:1、通过header函数实现跳转;2、使用Meta标签实现跳转;3、通过在PH...
    99+
    2023-06-14
  • javascript如何实现跳转页面
    JavaScript是一种常用的编程语言,常常用于网页开发中。在网页设计中,经常要用到跳转页面的功能,在这个过程中,JavaScript跳转页面是最常用的方法之一。JavaScript还可以帮助用户优化页面,增强用户的体验。本文将为您介绍使...
    99+
    2023-05-14
  • android如何实现页面跳转
    Android中实现页面跳转主要有两种方式:隐式跳转和显式跳转。1. 隐式跳转:隐式跳转是指通过指定Intent的Action来进行...
    99+
    2023-08-19
    android
  • vue怎么实现本项目页面之间跳转
    这篇“vue怎么实现本项目页面之间跳转”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue怎么实现本项目页面之间跳转”文章吧...
    99+
    2023-06-30
  • react 怎么实现页面跳转不记录
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react 怎么实现页面跳转不记录?React-router:页面跳转并清除当前页的历史记录有如下情况:用户打开激活链接;用户完成激活过程后,系统会将其移...
    99+
    2023-05-14
    React
  • React Router 5.1.0如何使用useHistory实现页面跳转导航
    React Router 5.1.0如何使用useHistory实现页面跳转导航,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.使用withRouter组件withRou...
    99+
    2023-06-25
  • nodejs怎么实现多页面跳转
    近年来,Node.js以其高效的性能、丰富的功能和强大的生态系统成为了前端开发者的得力工具。Node.js作为服务端的运行环境,可被用于实现复杂的Web应用,同时也是实现多页面跳转的理想选择。本文将详细讲解如何使用Node.js实现多页面的...
    99+
    2023-05-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作