我试图将某种类型的 * 服务 * 共享给嵌套在另一个组件中的组件,但我得到了一个未定义的错误。
“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;
2条答案
按热度按时间n7taea2i1#
上下文的创建应该在组件之外,这一行
const UserContext = createContext({});
应该在App
组件之外,并且应该导出它:确保在
Login
中,在执行以下操作之前,在顶部导入UserContext
:2guxujil2#
将
UserContext
对象视为一个外部盒子,可以挂载到React的树结构对象中的任何其他对象(组件)。您应该在App
组件外部声明上下文对象。