React开发学习- JWT用户认证与异步请求

Posted 火腿肠烧烤大赛冠军

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React开发学习- JWT用户认证与异步请求相关的知识,希望对你有一定的参考价值。

强弱类型的继承关系

如果A类型继承了B继承
那么如果要求类型A但是使用的是类型B那么也不会报错

js为鸭子类型:面向接口编程而不是面向对象编程(只校验格式)
所以说即使不是一个类型只要样子一样就不会报错

使用JSON-SERVER模仿不符合REST API接口的接口

创建middleware.js

module.exports = (req,res,next)=>{
    if(req.method === 'POST' && req.path ==='/login'){
        if(req.body.username === 'sunyifang' && req.body.password ==='123123'){
            return res.status(200).json({
                user:{
                    token:'123'
                }
            })
        }else{
            return res.status(400).json({message:'用户名或密码错误'});
        }
    }
}

更改JSON文件:

    "json-server": "json-server __json_server_mock__/db.json --watch --port 3001 --middlewares ./__json_server_mock__/middleware.js"

使用jira-dev-tool

npm下载:

npx imooc-jira-tool

在index.tsx中使用拦截函数:

import {loadDevTools} from 'jira-dev-tool';
//使用sever模仿数据
loadDevTools(()=>{
  ReactDOM.render(
    <React.StrictMode>
      <App />
    </React.StrictMode>,
    document.getElementById('root')
  );
})

然后就可以在页面发现这个 小东西了

使用context来管理全局变量

import React, { ReactNode, useState } from "react";
import * as auth from "./../auth-provider";
import { User } from "./../screens/project-list/search-panel";


interface AuthForm {
  username: string;
  password: string;
}

const AuthContext = React.createContext<
| {
    user: User | null;
    register: (form: AuthForm) => Promise<void>;
    login: (form: AuthForm) => Promise<void>;
    logout: () => Promise<void>;
  }
| undefined
>(undefined);
AuthContext.displayName = "AuthContext";

export const AuthProvider = ({children}:{children:ReactNode}) => {
  const [user,setUser] = useState<User|null>(null)

  const login = (form:AuthForm)=> auth.login(form).then(setUser)
  const register = (form:AuthForm)=> auth.register(form).then(setUser)
  const logout = ()=> auth.logout().then(()=>setUser(null))

  return <AuthContext.Provider children={children} value={{user,login,register,logout}}/>
};

export const useAuth = () => {
  const context = React.useContext(AuthContext);
  if (!context) {
    throw new Error("useAuth必须在AuthProvider中使用");
  }
  return context;
};

axios 与fech

fetch不会根据请求码抛出异常,而axios会
fetch只会在断网或网络连接失败时抛出异常

hook的使用条件

如果你的函数要用一个hook的时候 那么你的函数必须是一个hook

TS-utility type

用泛型给它传入一个其他类型,然后utility type对这个类型进行某种操作
用几个类型组成一个新的类型

// 类型别名、Utility Type 讲解
// 联合类型
let myFavoriteNumber: string | number;
myFavoriteNumber = "seven";
myFavoriteNumber = 7;
// TS2322: Type '{}' is not assignable to type 'string | number'.
// myFavoriteNumber = {}
let jackFavoriteNumber: string | number;

// 类型别名在很多情况下可以和interface互换
// interface Person {
//   name: string
// }
// type Person = { name: string }
// const xiaoMing: Person = {name: 'xiaoming'}

// 类型别名, interface 在这种情况下没法替代type
type FavoriteNumber = string | number;
let roseFavoriteNumber: FavoriteNumber = "6";

// interface 也没法实现Utility type
type Person = {
  name: string;
  age: number;
};
const xiaoMing: Partial<Person> = {};
const shenMiRen: Omit<Person, "name" | "age"> = {};
type PersonKeys = keyof Person;
type PersonOnlyName = Pick<Person, "name" | "age">;
type Age = Exclude<PersonKeys, "name">;

// Partial 的实现
type Partial<T> = {
  [P in keyof T]?: T[P];
};

以上是关于React开发学习- JWT用户认证与异步请求的主要内容,如果未能解决你的问题,请参考以下文章

#私藏项目实操分享# Spring专题「开发实战」Spring Security与JWT实现权限管控以及登录认证指南

GoWeb开发基于CookieSession和基于JWT Token的认证模式介绍

深入浅出Spring原理及实战「开发实战系列」SpringSecurity与JWT实现权限管控以及登录认证指南

JWT

Spring Security + JWT学习

基于JWT用户认证方式(前后端分离)