不能使用 React 上下文?
Can't use React context?
我的 index.js
有:
ReactDOM.render(
<FirebaseContext.Provider value={new Firebase()}>
<Suspense fallback="loading">
<App/>
</Suspense>
</FirebaseContext.Provider>,
document.getElementById('root')
);
内部 app.js
我正在尝试访问上下文:
export default function App(props) {
console.log("app trying to use firebase");
const {firebase} = useFirebase();
return <div>{firebase && firebase.loggedIn()}</div>
}
FirebaseContext 和 Firebase class 定义如下:
export const FirebaseContext = createContext({});
export const useFirebase = () => useContext(FirebaseContext);
export default class Firebase {
constructor() {
console.log("firebase intialized")
app.initializeApp(firebaseConfig);
this.auth = app.auth();
}
loggedIn = () => {
return !!this.auth.currentUser;
}
}
FirebaseContext 似乎已正确初始化,因为我在控制台中获得了输出,但我一直收到错误:无法读取未定义的 属性 'loggedIn'。
为什么我不能使用我的上下文?
Context.Provider
<MyContext.Provider value={/* some value */}>
每个 Context 对象都带有一个 Provider React 组件,该组件允许使用组件订阅上下文更改。
Provider 组件接受要传递给作为此 Provider 后代的消费组件的值 prop。一个提供者可以连接到多个消费者。可以嵌套提供程序以覆盖树中更深处的值。
像这样删除解构后,您是否尝试过您的代码
const {firebase} = useFirebase();
=>>>const firebase = useFirebase();
如果问题仍然存在,则尝试绑定 firebase 变量,因为 loggedIn 在基于 class 的组件中导致未定义。
我的 index.js
有:
ReactDOM.render(
<FirebaseContext.Provider value={new Firebase()}>
<Suspense fallback="loading">
<App/>
</Suspense>
</FirebaseContext.Provider>,
document.getElementById('root')
);
内部 app.js
我正在尝试访问上下文:
export default function App(props) {
console.log("app trying to use firebase");
const {firebase} = useFirebase();
return <div>{firebase && firebase.loggedIn()}</div>
}
FirebaseContext 和 Firebase class 定义如下:
export const FirebaseContext = createContext({});
export const useFirebase = () => useContext(FirebaseContext);
export default class Firebase {
constructor() {
console.log("firebase intialized")
app.initializeApp(firebaseConfig);
this.auth = app.auth();
}
loggedIn = () => {
return !!this.auth.currentUser;
}
}
FirebaseContext 似乎已正确初始化,因为我在控制台中获得了输出,但我一直收到错误:无法读取未定义的 属性 'loggedIn'。 为什么我不能使用我的上下文?
Context.Provider
<MyContext.Provider value={/* some value */}>
每个 Context 对象都带有一个 Provider React 组件,该组件允许使用组件订阅上下文更改。
Provider 组件接受要传递给作为此 Provider 后代的消费组件的值 prop。一个提供者可以连接到多个消费者。可以嵌套提供程序以覆盖树中更深处的值。
像这样删除解构后,您是否尝试过您的代码
const {firebase} = useFirebase();
=>>>const firebase = useFirebase();
如果问题仍然存在,则尝试绑定 firebase 变量,因为 loggedIn 在基于 class 的组件中导致未定义。