调用自定义Hook报TypeError: X is not a function错误排查
问题描述
开发简易登录页面时,计划将登录组件生成的token传递给负责设置context的auth组件,实现登录完成后将用户重定向回首页的逻辑。运行过程中在handleLogin执行阶段抛出authState is not a function错误,相关核心代码如下:
const authState = useAuthState(); const handleLogin = accessToken => { console.log(accessToken); authState({ accessToken }); history.push("/"); }
其中handleLogin由登录组件的onSuccess回调触发执行,参考同类场景代码示例确认箭头函数内调用状态方法的写法本身不存在语法问题,最初未定位到问题根源。
问题根因
经排查确认,报错由取值不匹配导致:通过useAuthState()获取到的authState并非Context Provider暴露的有效状态更新方法,因此无法作为函数调用。修正Provider暴露值与Hook返回值的对应关系后问题已解决。
同类报错排查思路
- 优先校验Hook返回值类型:在Hook调用后立即执行
console.log(typeof 目标变量),确认拿到的值是否为预期的函数类型,快速定位取值不匹配问题。 - 核对Context Provider配置:检查Provider的
value属性传入的内容,确认向外暴露的字段名、值类型与组件侧通过Hook获取的内容完全一致,排除拼写错误、字段名不匹配、解构顺序错误导致的取值异常。 - 校验组件嵌套层级:确认调用Hook的组件处于对应Context Provider的包裹范围内,排除Provider未挂载、嵌套层级错误导致Hook返回Context默认空值的情况。
- 校验Hook调用规则:确保Hook始终在React函数组件/自定义Hook的顶层作用域调用,不要在循环、条件判断、普通嵌套函数内执行Hook调用逻辑,避免Hook执行顺序异常导致返回值错误。
内容的提问来源于stack exchange,提问作者flag
相关产品推荐
相关产品推荐

