【问题标题】:React useContext returns undefined反应 useContext 返回未定义
【发布时间】:2019-12-13 03:44:09
【问题描述】:

我正在尝试使用 React Context 来管理我的项目的状态,但这次我似乎无法让它适用于我的 CRA 代码库,而我在其他项目上进行了成功的尝试。 useContext 返回未定义,因此我无法访问上下文中的值,但我仔细检查了我的 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 };

【问题讨论】:

    标签: reactjs react-hooks react-context


    【解决方案1】:

    你有一个小错字。

    正确的是value,而不是values,而不是s

    <PlayerContext.Provider value={values}>
    

    编辑:

    如果你得到undefined 并且不是因为拼写错误,你可能忘记用Provider“包装”一个组件,而undefined 值来自React.createContext() 的第一个参数(未定义是你什么都不通过)

    【讨论】:

    • 哇.. 我看了 5 分钟的代码,只是看不到它。现在我无法取消它?
    • 这让我抓了我的(想知道我做错了什么)大约 30 分钟!
    猜你喜欢
    • 2021-07-19
    • 1970-01-01
    • 2019-12-24
    • 2023-04-06
    • 1970-01-01
    • 2020-12-08
    • 2021-07-02
    相关资源
    最近更新 更多