javascript 与嵌套组件共享上下文,未定义获取UserContext

gg0vcinb  于 2023-04-10  发布在  Java
关注(0)|答案(2)|浏览(109)

我试图将某种类型的 * 服务 * 共享给嵌套在另一个组件中的组件,但我得到了一个未定义的错误。
“UserContext”未定义(未定义)
这是我的App.js:

import logo from './logo.svg';
import './App.css';
import React, {createContext} from "react";
import {
    BrowserRouter as Router,
    Routes,
    Route
} from "react-router-dom";
import TopPanel from "./components/topPanel/TopPanel";
import UserCtx from "./services/UserCtx";

function App() {

    const UserContext = createContext({});

    return (
        <Router>
            <UserContext.Provider value={new UserCtx()}>
                <TopPanel/>
            </UserContext.Provider>
            <Routes>
                ...
            </Routes>
        </Router>
    );
}

export default App;

TopPanel组件内部,有一个Login组件,它应该使用上下文:

import React, {useState, useContext} from "react";

function Login() {

    const userCtx = useContext(UserContext);

    ...
}

export default Login;

但是它显然没有被传递。请问我做错了什么?它甚至看起来都没有传递给第一级组件。
不要认为它是相关的,但这里是上下文对象:

import React from "react";

class UserCtx {

    isLoggedIn;
    token;

    constructor() {
        this.isLoggedIn = false;
    }

    logIn = (token) => {
       console.log("LOGGING IN!");
       this.isLoggedIn = true;
       this.token = token;
    }
}

export default UserCtx;
n7taea2i

n7taea2i1#

上下文的创建应该在组件之外,这一行const UserContext = createContext({});应该在App组件之外,并且应该导出它:

export const UserContext = createContext({});

确保在Login中,在执行以下操作之前,在顶部导入UserContext

import React, {useState, useContext} from "react";
import {UserContext} from "../../App"; // use the correct path

function Login() {

    const userCtx = useContext(UserContext);

    ...
}

export default Login;
2guxujil

2guxujil2#

UserContext对象视为一个外部盒子,可以挂载到React的树结构对象中的任何其他对象(组件)。您应该在App组件外部声明上下文对象。

相关问题