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

React使用Context Provider设置全局状态时提示setIsLoggedin不是函数

问题原因及修复方案

核心错误:Context Provider 的 value 传值格式错误

你在 SessionContext.Provider 的 value 属性传入值时,缺少了一层对象包裹的花括号:

// 错误写法
<SessionContext.Provider value={isLoggedIn, setIsLoggedIn}>{children}</SessionContext.Provider>

JSX 中 {} 内的逗号表达式只会返回最后一个运算值,也就是说你现在实际传入 Context 的只有 setIsLoggedIn 本身,并不是包含 isLoggedIn 和 setIsLoggedIn 两个属性的对象。当你在组件中用对象解构语法 const { setIsLoggedIn } = useContext(SessionContext) 取值时,相当于从函数类型的值上解构 setIsLoggedIn 属性,得到的结果是 undefined,调用时自然会报「不是函数」的错误。

修复方法

把 value 的传入值用对象包裹,修改为如下写法即可:

<SessionContext.Provider value={{ isLoggedIn, setIsLoggedIn }}>{children}</SessionContext.Provider>

这里的两层花括号含义分别是:外层是 JSX 标识内部为 JS 表达式的语法,内层是对象字面量的语法。

额外注意项

注意检查变量名拼写的一致性:你在 SessionProvider 的 props 里定义的默认值是 isLoggedin(末尾的 i 为小写),和状态名 isLoggedIn(中间的 I 为大写)拼写不一致,建议统一拼写规则,避免后续传参时出现预期外的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:54:05