返回顶部
首页 > 资讯 > 精选 >React-router v6怎么实现登录验证
  • 878
分享到

React-router v6怎么实现登录验证

2023-06-30 16:06:15 878人浏览 独家记忆
摘要

这篇文章主要讲解了“React-router v6怎么实现登录验证”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“React-router v6怎么实现登录验证”吧!此示例

这篇文章主要讲解了“React-router v6怎么实现登录验证”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“React-router v6怎么实现登录验证”吧!

此示例演示了一个包含三个页面的简单登录流程:公共页面、受保护页面和登录页面。 为了查看受保护的页面,你必须先登录。
首先,访问公共页面。 然后,访问受保护的页面。 你尚未登录,因此你将被重定向到登录页面。 登录后,你将被重定向回受保护的页面。

封装 Context 包裹容器

首先封装AuthProvider组件,利用Context特性共享那些对于一个组件树而言是“全局”的数据。
全局定义usersignInsignOut数据和方法,signInsignOut使用了高阶函数,也方便后续扩展和修改。

Context主要应用场景在于很多不同层级的组件需要访问同样一些的数据。请谨慎使用,因为这会使得组件的复用性变差。
如果你只是想避免层层传递一些属性,组件组合(component composition)有时候是一个比 Context更好的解决方案。

import { Reactnode, createContext, useState } from "react";export interface AuthContextType {  user: any;  signIn: (user: string, callback: VoidFunction) => void;  signOut: (callback: VoidFunction) => void;}export let AuthContext = createContext<AuthContextType | null>(null);const fakeAuthProvider = {  isAuthenticated: false,  signIn(callback: VoidFunction) {    this.isAuthenticated = true;    setTimeout(callback, 100);  },  signOut(callback: VoidFunction) {    this.isAuthenticated = false;    setTimeout(callback, 100);  },};const AuthProvider = ({ children }: { children: ReactNode }) => {  const [user, setUser] = useState<any>(null);  let signIn = (newUser: string, callback: VoidFunction) => {    return fakeAuthProvider.signIn(() => {      setUser(newUser);      callback();    });  };  let signOut = (callback: VoidFunction) => {    return fakeAuthProvider.signOut(() => {      setUser(null);      callback();    });  };  return (    <AuthContext.Provider value={{ user, signIn, signOut }}>      {children}    </AuthContext.Provider>  );};export default AuthProvider;

封装 Layout 父级容器

Layout组件主要是针对登录状态进行校验,然后做相应处理。利用react-router v6中<Outlet />组件显示嵌套路由,相比于v5版本v6实现嵌套路由更加方便,省略了很多冗余的判断代码。

import { useContext } from "react";import { useNavigate, Link, Outlet } from "react-router-dom";import { AuthContext, AuthContextType } from "../AuthProvider";const useAuth = () => useContext(AuthContext);const AuthStatus = () => {  let auth = useAuth();  let { user, signOut } = auth as AuthContextType;  let navigate = useNavigate();  if (!user) return <p>没有登录</p>;  return (    <>      <p>你好 {user}! </p>      <button onClick={() => signOut(() => navigate("/"))}>退出</button>    </>  );};const Layout = () => {  return (    <div>      <AuthStatus />      <ul>        <li>          <Link to="/">公共页面</Link>        </li>        <li>          <Link to="/protected">受保护页面</Link>        </li>      </ul>      <Outlet />    </div>  );};export default Layout;

开发 Login 模块

import { useContext, FORMEvent } from "react";import { useNavigate, useLocation, Location } from "react-router-dom";import { AuthContext, AuthContextType } from "../AuthProvider";interface State extends Omit<Location, "state"> {  state: {    from: {      pathname: string;    };  };}const useAuth = () => useContext(AuthContext);const Login = () => {  let auth = useAuth();  let { signIn } = auth as AuthContextType;  const { state } = useLocation() as State;  let from = state.from.pathname || "/";  let navigate = useNavigate();  const handleSubmit = (event: FormEvent<htmlFormElement>) => {    event.preventDefault();    let formData = new FormData(event.currentTarget);    let username = formData.get("username") as string;    signIn(username, () => navigate(from, { replace: true }));  };  return (    <div>      <p>您必须登录才能查看该页面 {from}</p>      <form onSubmit={handleSubmit}>        <label>          用户名: <input name="username" type="text" />        </label>        <button type="submit">登录</button>      </form>    </div>  );};export default Login;

开发 Protected 包裹容器

主要就是对登录状态进行校验,成功则渲染子组件,否则跳转回登录页面

import { useContext } from "react";import { useLocation, Navigate } from "react-router-dom";import { AuthContext, AuthContextType } from "../AuthProvider";const useAuth = () => useContext(AuthContext);const RequireAuth = ({ children }: { children: jsX.Element }) => {  let auth = useAuth();  let { user } = auth as AuthContextType;  let location = useLocation();  if (!user) return <Navigate to="/login" state={{ from: location }} replace />;  return children;};export default RequireAuth;

App 入口文件

入口文件没有对路由进行懒加载优化,因为是小应用,所以实际开发还是要考虑性能优化的。

import { Routes, Route } from "react-router-dom";import AuthProvider from "src/views/AuthProvider";import Layout from "src/views/auth/layout";import LoginPage from "src/views/auth/login";import PublicPage from "src/views/auth/publicPage";import RequireAuth from "src/views/auth/requireAuth";import ProtectedPage from "src/views/auth/protectedPage";const App = () => {  return (    <AuthProvider>      <Routes>        <Route element={<Layout />}>          <Route path="/" element={<PublicPage />} />          <Route path="/login" element={<LoginPage />} />          <Route            path="/protected"            element={              <RequireAuth>                <ProtectedPage />              </RequireAuth>            }          />        </Route>      </Routes>    </AuthProvider>  );};export default App;

React-router v6怎么实现登录验证

感谢各位的阅读,以上就是“React-router v6怎么实现登录验证”的内容了,经过本文的学习后,相信大家对React-router v6怎么实现登录验证这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: React-router v6怎么实现登录验证

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

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

猜你喜欢
  • React-router v6怎么实现登录验证
    这篇文章主要讲解了“React-router v6怎么实现登录验证”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“React-router v6怎么实现登录验证”吧!此示例...
    99+
    2023-06-30
  • 如何使用React Router v6添加身份验证
    这篇文章主要讲解了“如何使用React Router v6添加身份验证”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用React Router ...
    99+
    2023-06-30
  • 使用React Router v6 添加身份验证的方法
    目录开始基础路由创建受保护的路由使用嵌套路由和< Outlet />结尾React Router v6是React应用程序的一个流行且功能强大的路由库。它提供了一种声明式...
    99+
    2024-04-02
  • React-Router(V6)的权限控制实现示例
    目录接口权限页面权限1. 菜单权限2. 路由权限按钮权限参考在一个后台管理系统中,安全是很重要的。不光后端需要做权限校验,前端也需要做权限控制。 我们可以大致将权限分为3种: 接口权...
    99+
    2023-05-19
    React-Router权限控制 React-Router权限
  • 浅谈React-routerv6实现登录验证流程
    目录封装 Context 包裹容器封装 Layout 父级容器开发 Login 模块开发 Protected 包裹容器App 入口文件此示例演示了一个包含三个页面的简单登录流程:公共...
    99+
    2024-04-02
  • JDBC怎么实现验证登录
    这篇文章主要介绍“JDBC怎么实现验证登录 ”,在日常操作中,相信很多人在JDBC怎么实现验证登录 问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JDBC怎么实现验证登录 ”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-02
  • react-router-dom v6 通过outlet实现keepAlive 功能的实现
    本文主要介绍了react-router-dom v6 通过outlet实现keepAlive 功能的实现,具体如下: keepAlive代码: import React, { us...
    99+
    2024-04-02
  • Express实现登录验证
    本文实例为大家分享了Express实现登录验证的具体代码,供大家参考,具体内容如下 Express实现的路由登录,这套代码适用于很多场景,特此记录,以备后用。 首先是主文件:serv...
    99+
    2024-04-02
  • php怎么实现密码登录验证
    在PHP中,可以使用以下步骤来实现密码登录验证:1. 创建一个HTML表单,包含一个用户名输入框和一个密码输入框。用户输入用户名和密...
    99+
    2023-10-10
    php
  • vue实现登录验证码
    本文实例为大家分享了vue实现登录验证码的具体代码,供大家参考,具体内容如下 先来demo效果图 canvas验证码组件(可直接复制,无需改动) <template>...
    99+
    2024-04-02
  • VUE实现token登录验证
    本文实例为大家分享了VUE实现token登录验证的具体代码,供大家参考,具体内容如下 实现这个登录功能的过程真是一波三折,中途出现了bug,整了两三天才解决了问题,心力交瘁,简直一个...
    99+
    2024-04-02
  • Android实现验证码登录
    本文实例为大家分享了Android实现验证码登录的具体代码,供大家参考,具体内容如下 结果展示 1.导包 1.1在项目的gradle中导入 maven { url "https...
    99+
    2024-04-02
  • vue router+vuex如何实现首页登录验证判断逻辑
    这篇文章主要为大家展示了“vue router+vuex如何实现首页登录验证判断逻辑”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue router+vuex...
    99+
    2024-04-02
  • vue怎么实现手机验证码登录
    这篇文章主要介绍“vue怎么实现手机验证码登录”,在日常操作中,相信很多人在vue怎么实现手机验证码登录问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue怎么实现手机验证码登录”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-25
  • 怎么用php+AJax+json实现登录验证
    随着WEB2.0和AJAX的发展,越来越多的站点采用了AJAX技术进行部分页面的异步加载。而PHP作为一种流行的Web开发语言,结合AJAX可以实现一些很酷的效果。本文将会介绍如何使用AJAX和JSON实现基本的登录验证功能。首先我们需要准...
    99+
    2023-05-14
    php ajax json
  • react怎么实现图片验证
    本教程操作环境:Windows10系统、react18版、Dell G3电脑。react怎么实现图片验证?react实现图片验证码效果如图所示:import React, { Component } from 'react'...
    99+
    2023-05-14
    React
  • Python实现简单登录验证
    本文实例为大家分享了简单的Python登录验证,供大家参考,具体内容如下 编写登录接口 要求:1、输入用户名密码    2、认证成功后显示欢迎信息    3、输错三次后锁定 #coding=utf-8 ...
    99+
    2022-06-04
    简单 Python
  • JavaScript实现登录滑块验证
    本文实例为大家分享了JavaScript实现登录滑块验证的具体代码,供大家参考,具体内容如下 html代码 <div class="login-select"> ...
    99+
    2024-04-02
  • vue+springboot实现登录验证码
    本文实例为大家分享了vue+springboot实现登录验证码的具体代码,供大家参考,具体内容如下 先看效果图 在login页面添加验证码html 在后端pom文件添加kaptc...
    99+
    2024-04-02
  • Ajax登录验证实现代码
    目录 package cn.hp.util; import java.sql.*; public class JDBCUtils { static Connection c...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作