useContext returns 在 _app.js 中未定义 (Next.js)
useContext returns undefined in _app.js (Next.js)
使用 Next.js,我可以毫无问题地获取 header.js 文件中的上下文值,但 returns undefined
在 _app.js[=17= 中]
这是我的代码。
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 中的状态或上下文。任何帮助将不胜感激。
是的,您无法在 _app.js 上获取上下文的值,因为在顶部 _app.js 不能是 LangProvider 的子项。您只能在 LangProvider 容器的子组件上使用上下文的值。
使用 Next.js,我可以毫无问题地获取 header.js 文件中的上下文值,但 returns undefined
在 _app.js[=17= 中]
这是我的代码。
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 中的状态或上下文。任何帮助将不胜感激。
是的,您无法在 _app.js 上获取上下文的值,因为在顶部 _app.js 不能是 LangProvider 的子项。您只能在 LangProvider 容器的子组件上使用上下文的值。