React 上下文状态未更新

React context state is not being updated

我有一个 next.js 应用程序,我在其中尝试使用反应上下文来导出状态。但是,状态不会更新并保持为 createContext 挂钩设置的初始值,在这种情况下未定义。我做错了什么吗?

这是我创建上下文的文件:

import { NextPage } from 'next';
import {
  useState,
  SyntheticEvent,
  createContext,
  useContext,
  ReactNode,
} from 'react';
import { TimeZoneType } from '../CompetitionList/types';

interface Props {
  children: ReactNode;
}

type ContextType = {
  timeZone: TimeZoneType;
  handleTimeZone: (_event: SyntheticEvent, _newZone: TimeZoneType) => void;
};

const TimeZone = createContext<ContextType>({} as ContextType);

const TimeZoneState: NextPage<Props> = ({ children }) => {
  const [timeZone, setTimeZone] = useState<TimeZoneType>('Local');
  const handleTimeZone = (_event: SyntheticEvent, newZone: TimeZoneType) => {
    if (newZone !== null) {
      setTimeZone(newZone);
    }
  };
  return (
    <TimeZone.Provider value={{ timeZone, handleTimeZone }}>
      {children}
    </TimeZone.Provider>
  );
};

export const useTimeZone = () => {
  return useContext(TimeZone);
};

我调用上下文类似这样:

import { useTimeZone } from '../components/GlobalVariables/TimeZone';
...

const { timeZone, handleTimeZone } = useTimeZone();
console.log({timeZone})
//returns undefined

对不起,如果这是一个糟糕的问题,这是我的第一个问题。

我想我找到了解决方法。我只需要将我的 TimeZone.Provider 包裹在我想使用上下文的组件周围。因此,我导出了 TimeZoneState 函数并将其包裹在 _app.tsx 中的页面组件中,如下所示:

const MyApp = ({ Component, pageProps }: AppProps) => {
  return (
    <TimeZoneState>
      <Component {...pageProps} />
    </TimeZoneState>
  );
};

export default MyApp

这让我可以随心所欲地在页面中使用我的上下文。

import { useTimeZone } from '../components/GlobalVariables/TimeZone';
...

const { timeZone, handleTimeZone } = useTimeZone();