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

useContext使用后页面持续加载空白,无编译错误问题排查

问题原因

你的应用卡死是因为LoginContext.js里的LoginProvider组件出现了无限递归调用。组件内部return时,你用了<LoginProvider>包裹children,但这个组件本身就叫LoginProvider,这会导致它不断渲染自己,形成无限循环,最终浏览器资源耗尽,页面空白且无法响应。

修复方案

修改LoginContext.js中的return部分,把<LoginProvider>替换为<LoginContext.Provider>——createContext创建的上下文对象自带Provider组件,这才是正确的上下文提供者:

import React, { createContext, useState } from "react";
import jwt_decode from 'jwt-decode';

const LoginContext = createContext();

export function LoginProvider({children}) {
    
    const [user, setUser] = useState({})

    function handleCallbackResponse(response){
        var userData = jwt_decode(response.credential);
        setUser(userData);
        document.getElementById('signInDiv').hidden = true;
    }

    function handleSignOut(event) {
        setUser({})
        document.getElementById('signInDiv').hidden = false;
    }  

    // 替换为LoginContext.Provider
    return(
        <LoginContext.Provider value={{user, handleCallbackResponse, handleSignOut}}>
            {children}
        </LoginContext.Provider>
    );
}

export default LoginContext
额外优化建议
  • 避免直接操作DOM:document.getElementById('signInDiv')不符合React范式,建议用useRef获取DOM元素,比如:
    // 在组件内定义ref
    const signInDivRef = useRef(null);
    // 绑定到元素上
    <div ref={signInDivRef}></div>
    // 操作时使用
    signInDivRef.current.hidden = true;
    
  • 统一空值判断逻辑:Login组件里Object.keys(user).length !== 0已经能判断用户是否登录,可和{user && ...}的判断统一,避免逻辑冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:15:36