当前位置:首页 > React

react如何附带tokens

2026-03-31 01:28:16React

在React中附带Tokens的方法

使用HTTP请求库(如axiosfetch)时,将tokens附加到请求头中。以axios为例,可以在请求拦截器中设置Authorization头:

import axios from 'axios';

axios.interceptors.request.use(config => {
  const token = localStorage.getItem('token');
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
});

使用Context API传递Tokens

通过React的Context API全局管理tokens,避免手动传递。创建一个AuthContext:

react如何附带tokens

import React, { createContext, useContext } from 'react';

const AuthContext = createContext();

export const AuthProvider = ({ children }) => {
  const [token, setToken] = useState(localStorage.getItem('token'));

  return (
    <AuthContext.Provider value={{ token, setToken }}>
      {children}
    </AuthContext.Provider>
  );
};

export const useAuth = () => useContext(AuthContext);

在自定义Hook中封装Token逻辑

创建一个自定义Hook处理token的获取和设置:

import { useState } from 'react';

export const useToken = () => {
  const [token, setTokenInternal] = useState(() => {
    return localStorage.getItem('token');
  });

  const setToken = newToken => {
    localStorage.setItem('token', newToken);
    setTokenInternal(newToken);
  };

  return [token, setToken];
};

使用高阶组件传递Tokens

创建高阶组件包装需要token的组件:

react如何附带tokens

const withAuth = (WrappedComponent) => {
  return (props) => {
    const token = localStorage.getItem('token');
    return <WrappedComponent {...props} token={token} />;
  };
};

在路由保护中使用Tokens

使用React Router保护需要认证的路由:

import { Route, Redirect } from 'react-router-dom';

const PrivateRoute = ({ component: Component, ...rest }) => (
  <Route
    {...rest}
    render={props =>
      localStorage.getItem('token') ? (
        <Component {...props} />
      ) : (
        <Redirect to="/login" />
      )
    }
  />
);

处理Token过期

实现token刷新机制:

axios.interceptors.response.use(
  response => response,
  error => {
    const originalRequest = error.config;
    if (error.response.status === 401 && !originalRequest._retry) {
      originalRequest._retry = true;
      return axios.post('/refresh-token', {
        refreshToken: localStorage.getItem('refreshToken')
      }).then(res => {
        localStorage.setItem('token', res.data.token);
        axios.defaults.headers.common['Authorization'] = 'Bearer ' + res.data.token;
        return axios(originalRequest);
      });
    }
    return Promise.reject(error);
  }
);

标签: reacttokens
分享给朋友:

相关文章

react如何diff

react如何diff

React Diff 算法原理 React 的 Diff 算法是 Virtual DOM 的核心部分,用于高效更新真实 DOM。其核心思想是通过对比新旧 Virtual DOM 树的差异,最小化 DO…

如何监控react性能

如何监控react性能

使用 React Profiler API React 16.5 及以上版本内置了 Profiler API,可直接测量组件渲染时间。通过 <React.Profiler> 包裹目标组件,…

react如何代码优化

react如何代码优化

减少不必要的重新渲染 使用 React.memo 包装函数组件以避免在 props 未变化时重新渲染。对于类组件,可以通过 shouldComponentUpdate 或继承 PureComponen…

如何运行react项目

如何运行react项目

运行React项目的步骤 确保已安装Node.js(建议版本12或更高)和npm/yarn。若未安装,可从Node.js官网下载。 全局安装create-react-app脚手架工具(若已安装可跳过…

react如何启动6

react如何启动6

安装 Node.js 和 npm/yarn 确保系统中已安装 Node.js(建议版本 16 或更高)和 npm/yarn。可通过以下命令验证版本: node -v npm -v 创建 Reac…

react如何清空state

react如何清空state

清空 React 组件的 state 在 React 中清空 state 可以通过多种方式实现,具体取决于组件的类型(类组件或函数组件)以及 state 的结构。 类组件中清空 state 在类组件…