You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Context报错:无法解构useContext返回值的team属性,求排查

问题

在Team.tsx组件中尝试访问Team上下文时触发错误:

Cannot destructure property 'team' of '(0 , react__WEBPACK_IMPORTED_MODULE_2__.useContext)(...)' as it is undefined

报错位置:./app/components/Select/Team.tsx:15:13

已在组件中通过useContext引入Team上下文,但问题未解决,相关代码如下:

Team.tsx 组件代码

const Team: FC<Props> = ({values}) => { 
    
    const {team, setTeam} = useContext(TeamContext)
    
    const onValueChange = useCallback((team: string) => setTeam(team),[setTeam])
    
    return (
        <Select
            defaultValue={DEFAULT_TEAM}
            value={team}
            onValueChange={onValueChange}
        >
            <SelectTrigger>
                <SelectValue placeholder="Select a team" />
            </SelectTrigger>
            <SelectContent>
                <SelectLabel> Team </SelectLabel>
                {
                    values.map((team) => (
                        <SelectItem key={team} value={team}>
                            {team}
                        </SelectItem>
                    ))
                }
            </SelectContent>
        </Select>
    )
}

上下文创建代码

'use client'

import {createContext, useState } from 'react'
import type {Dispatch, SetStateAction, PropsWithChildren} from 'react'


type TeamContextType = {
    team: string,
    setTeam: Dispatch<SetStateAction<string>>
}

export const DEFAULT_TEAM = 'Arsenal'

const TeamContext = createContext<TeamContextType>({
    team: DEFAULT_TEAM,
    setTeam: () => {

    },
})

export const TeamContextProvider = ({children}: PropsWithChildren) => { 
    const [team, setTeam] = useState<string>(DEFAULT_TEAM)

    return (
        <TeamContext.Provider value={{team, setTeam}}>
            {children}
        </TeamContext.Provider>
    )
}

export default TeamContext;

可能的原因

  • Team组件未被TeamContextProvider包裹:useContext仅能在对应Provider的子组件树中获取上下文值。如果Team组件不在TeamContextProvider的覆盖范围内,useContext(TeamContext)会返回undefined,进而触发解构错误。

  • TeamContextProvider未正确挂载:比如在Next.js App Router中,若未将TeamContextProvider放在根布局(如layout.tsx)这类全局组件中,或者错误地在服务端组件中挂载该Provider(你的上下文代码已加'use client',但需确保挂载位置是客户端组件或允许客户端组件的位置),都会导致Team组件无法获取上下文。

  • 上下文导入错误:检查Team.tsx中TeamContext的导入方式是否正确。上下文代码中是默认导出TeamContext,所以Team.tsx中需用import TeamContext from '../path/to/your-context-file',若误用命名导入会导致获取到错误的上下文对象。

  • Team.tsx未声明为客户端组件:useContext是React客户端API,若Team.tsx是服务端组件(未添加'use client'指令),调用useContext会引发异常,导致上下文值为undefined。

内容的提问来源于stack exchange,提问作者user3720636

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 14:23:23