我对上下文有疑问,上下文api返回了我的undefined
值。
这是我的代码:
import { createContext } from "react";
const authContext = createContext();
export default authContext;
authContext.js
import React, { useReducer } from "react";
import authContext from "./authContext";
import authReducer from "./authReducer";
const authState = () => {
const initState = {
authValidte: false,
authToken: null,
authId: null,
};
const [state, dispatch] = useReducer(authReducer, initState);
return (
<authContext.Provider
value={{
authValidte: state.authValidte,
authToken: state.authToken,
authId: state.authId,
}}
>
{props.children}
</authContext.Provider>
);
};
export default authState;
authState.js
想要使用上下文的组件:
...
import authContext from "./context/auth/authContext";
function App() {
const AuthContext = useContext(authContext);
console.log(AuthContext); // undefined
...
答案 0 :(得分:1)
首先,请注意,自定义组件应为大写字母(AuthState
,AuthContext.Provider
等)。
要使authContext
在App
中可用,它必须是AuthContext.Provider
的子元素。了解有关Context in the docs的信息。
<AuthState>
<App/>
</AuthState>
答案 1 :(得分:1)
为了使您的App Component
使用上下文,您需要在App组件的层次结构中向上渲染authState provider
理想情况下,它应该是可能需要使用它的所有组件的共同父代。
还要注意,您的组件名称必须以upperCase
个字符开头
index.js
import AuthState from '/path/to/authState.js'
export default () => (
<AuthState>
<App/>
<AuthState>
)