反应useContext返回未定义

nay*_*iaw 3 reactjs react-context react-hooks

我正在尝试使用React Context管理我的项目的状态,但是当我成功尝试其他项目时,这次似乎无法使其适用于我的CRA代码库。useContext返回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;
Run Code Online (Sandbox Code Playgroud)

这是我的情况:

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 };
Run Code Online (Sandbox Code Playgroud)

Ven*_*sky 6

你有一个小错字。

而不是values正确的是value没有s

<PlayerContext.Provider value={values}>
Run Code Online (Sandbox Code Playgroud)

  • 哇..我看了代码5分钟,就是看不到。现在我无法取消它 (2认同)