React 16.7.0调用useEffect、useState提示不是函数的问题求助
报错根因
React 官方是在 16.8.0 版本才正式稳定支持 Hooks 特性,useEffect、useState 都属于 Hooks API,你当前使用的 16.7.0 版本并未内置稳定版的相关 API,因此调用时会抛出类型错误。
解决步骤
- 优先选择升级 React 相关依赖到 16.8.0 及以上版本
执行对应包管理器的升级命令:
npm 环境:
yarn 环境:npm install react@^16.8.0 react-dom@^16.8.0
升级完成后重启开发服务即可正常使用 Hooks。yarn add react@^16.8.0 react-dom@^16.8.0 - 若受项目限制暂时无法升级 React 版本,需要将当前 Hooks 逻辑改写为类组件生命周期写法
你当前的useEffect逻辑对应类组件中监听intentButton变量变化的更新逻辑,示例如下:class YourComponent extends React.Component { componentDidMount() { console.log("This is cool") } componentDidUpdate(prevProps) { if (prevProps.intentButton !== this.props.intentButton) { console.log("This is cool") } } // 其他组件逻辑 }
额外检查项
如果升级版本后仍有同类报错,可检查以下两点:
- 确保你调用
useEffect、useState的位置是在函数组件或者自定义 Hook 内部,不能在普通 JS 函数、类组件中调用 - 确认你的导入语法正确,你当前的导入写法
import React, { useEffect } from 'react'符合规范,无需调整
内容的提问来源于stack exchange,提问作者Ghost Checker
相关产品推荐
相关产品推荐

