useContext 在 _app.js (Next.js) 中返回 undefined

时间:2021-01-05 03:24:21

标签: next.js use-context

使用 Next.js,我可以毫无问题地获取 header.js 文件中的上下文值,但它在 _app.js 中返回 undefined

这是我的代码。

useLang.js

import { createContext, useContext, useState } from 'react'

const LangContext = createContext()

export const LangProvider = ({ children }) => {
  const [lang, setLang] = useState('en')
  const switchLang = (selected) => setLang(selected)

  return (
    <LangContext.Provider value={{ lang, switchLang }}>
      {children} 
    </LangContext.Provider>
  )
}

export const useLang = () => useContext(LangContext)

_app.js

import { LangProvider, useLang } from '../hooks/useLang'

export default function MyApp(props) {
  const { Component, pageProps } = props

  const contexts = useLang()
  console.log(contexts) // ------> undefined. why ???

  return (
    <LangProvider>
      <Component {...pageProps} />
    </LangProvider>
  )
}

header.js

import { useLang } from '../hooks/useLang'

export default function Header() {
  const { lang } = useLang() // ------> works fine here!

  return <> {lang} </>
}

我查看了 Next.js 文档,但没有提到您不能在 _app.js 中使用状态或上下文。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

是的,您无法在 _app.js 上获取上下文的值,因为在顶部 _app.js 不能是 LangProvider 的子代。您只能在 LangProvider 容器的子组件上使用上下文的值。