反应 useContext returns 未定义
React useContext returns undefined
我正在尝试使用 React Context 来管理我的项目的状态,但是这次我似乎无法让它在我的 CRA 代码库中工作,而我在其他项目上已经成功尝试了。 useContext
returns undefined 所以我无法访问上下文中的值,但我仔细检查了我的 Provider 是否在我的应用程序根级别。感谢任何帮助。
这是我简化的 App 组件:
import React, { useContext } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import './App.css';
import { PlayerContextProvider, PlayerContext } from 'contexts/PlayerContext';
const App = () => (
<PlayerContextProvider>
<Test />
<Router>
<Switch>
<Route path="/" exact component={Home} />
</Switch>
</Router>
</PlayerContextProvider>
);
const Test = () => {
const values = useContext(PlayerContext);
console.log('test values', values); // returns undefined!
return <div>Hello World</div>;
};
export default App;
这是我的上下文:
import React, { useState, createContext } from 'react';
const PlayerContext = createContext();
const PlayerContextProvider = ({ children }) => {
const [players, setPlayers] = useState(['test']);
const addPlayer = ({ name }) => {
setPlayers([...players, { name }]);
};
const values = { players, addPlayer };
console.log('context values', players); // shows ['test'] here
return (
<PlayerContext.Provider values={values}>
<>
{players}
{children}
</>
</PlayerContext.Provider>
);
};
export { PlayerContextProvider, PlayerContext };
你有一个小错字。
而不是 values
正确的是 value
没有 s
。
<PlayerContext.Provider value={values}>
编辑:
如果你得到 undefined
而不是因为打字错误,你可能忘记了用 Provider
“包装”一个组件,而 undefined
值来自React.createContext()
的第一个参数(未定义是你没有传递任何东西)
我正在尝试使用 React Context 来管理我的项目的状态,但是这次我似乎无法让它在我的 CRA 代码库中工作,而我在其他项目上已经成功尝试了。 useContext
returns undefined 所以我无法访问上下文中的值,但我仔细检查了我的 Provider 是否在我的应用程序根级别。感谢任何帮助。
这是我简化的 App 组件:
import React, { useContext } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import './App.css';
import { PlayerContextProvider, PlayerContext } from 'contexts/PlayerContext';
const App = () => (
<PlayerContextProvider>
<Test />
<Router>
<Switch>
<Route path="/" exact component={Home} />
</Switch>
</Router>
</PlayerContextProvider>
);
const Test = () => {
const values = useContext(PlayerContext);
console.log('test values', values); // returns undefined!
return <div>Hello World</div>;
};
export default App;
这是我的上下文:
import React, { useState, createContext } from 'react';
const PlayerContext = createContext();
const PlayerContextProvider = ({ children }) => {
const [players, setPlayers] = useState(['test']);
const addPlayer = ({ name }) => {
setPlayers([...players, { name }]);
};
const values = { players, addPlayer };
console.log('context values', players); // shows ['test'] here
return (
<PlayerContext.Provider values={values}>
<>
{players}
{children}
</>
</PlayerContext.Provider>
);
};
export { PlayerContextProvider, PlayerContext };
你有一个小错字。
而不是 values
正确的是 value
没有 s
。
<PlayerContext.Provider value={values}>
编辑:
如果你得到 undefined
而不是因为打字错误,你可能忘记了用 Provider
“包装”一个组件,而 undefined
值来自React.createContext()
的第一个参数(未定义是你没有传递任何东西)