You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React Material UI的App Bar中展示其他文件的用户登录信息

实现登录邮箱在Header的Typography中显示

方案一:使用localStorage快速实现

1. 在Login.js中保存邮箱到本地存储

登录成功后,把用户邮箱存入localStorage,在handleSubmit的成功回调里新增一行代码:

.then((res) => {
    localStorage.setItem('access_token', res.data.access);
    localStorage.setItem('refresh_token', res.data.refresh);
    localStorage.setItem('user_email', formData.email); // 新增:保存邮箱到localStorage
    axiosInstance.defaults.headers['Authorization'] =
        'JWT ' + localStorage.getItem('access_token');
    history.push('/');
}, reason =>{
    console.error(reason);
    setError("Invalid login details!")
    alert("Login Failed!\nIncorrect login details!");
});

2. 在Header.js中读取并显示邮箱

在Header组件内读取localStorage中的邮箱,同时处理未登录状态:

// Header.js组件内部
const userEmail = localStorage.getItem('user_email');

// 修改Typography标签
<Typography color='textSecondary' className={classes.userText}>
    {userEmail ? `当前登录:${userEmail}` : '未登录'}
</Typography>

方案二:使用React Context全局管理用户状态(更适合复杂应用)

如果应用多处需要使用用户信息,推荐用Context统一管理:

1. 创建UserContext

新建UserContext.js文件:

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

const UserContext = createContext();

export const UserProvider = ({ children }) => {
    // 初始化时从localStorage读取已保存的邮箱
    const [userEmail, setUserEmail] = useState(localStorage.getItem('user_email') || '');

    // 登录时更新用户邮箱
    const loginUser = (email) => {
        setUserEmail(email);
        localStorage.setItem('user_email', email);
    };

    // 登出时清除用户信息
    const logoutUser = () => {
        setUserEmail('');
        localStorage.removeItem('user_email');
        localStorage.removeItem('access_token');
        localStorage.removeItem('refresh_token');
    };

    return (
        <UserContext.Provider value={{ userEmail, loginUser, logoutUser }}>
            {children}
        </UserContext.Provider>
    );
};

// 自定义Hook方便组件调用
export const useUser = () => useContext(UserContext);

2. 在App.js中包裹UserProvider

确保整个应用能访问到用户状态:

import { UserProvider } from './UserContext';

function App() {
    return (
        <UserProvider>
            {/* 你的路由、Header等组件 */}
        </UserProvider>
    );
}

3. 在Login.js中更新用户状态

引入并调用Context的loginUser方法:

import { useUser } from './UserContext';

// Login组件内部
const { loginUser } = useUser();

// 修改登录成功回调
.then((res) => {
    localStorage.setItem('access_token', res.data.access);
    localStorage.setItem('refresh_token', res.data.refresh);
    loginUser(formData.email); // 更新全局用户邮箱
    axiosInstance.defaults.headers['Authorization'] =
        'JWT ' + localStorage.getItem('access_token');
    history.push('/');
}, reason =>{
    // 错误处理代码不变
});

4. 在Header.js中获取并显示邮箱

通过自定义Hook获取用户邮箱:

import { useUser } from './UserContext';

// Header组件内部
const { userEmail } = useUser();

// 修改Typography标签
<Typography color='textSecondary' className={classes.userText}>
    {userEmail ? `当前登录:${userEmail}` : '未登录'}
</Typography>

内容的提问来源于stack exchange,提问作者akash_s93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:05:32