Client Component 里为啥不能用 useState?
我在 Next.js 13+ 里写了个组件,加了 "use client" 指令,但一用 useState 就报错说 React 不是函数,这不科学啊?
我确定文件顶部写了 "use client",也 import 了 useState,但控制台一直报:
TypeError: (0 , react__WEBPACK_IMPORTED_MODULE_0__.useState) is not a function
是不是我哪里搞错了?比如用了服务端的 React 版本?可项目里明明只装了一个 react 啊……
建议改成这样:
常见问题出在这几种情况:
1. 有人写成
import React from 'react'然后用React.useState,这在客户端组件里会挂2. 服务端组件和客户端组件混用同一个react实例(虽然你说只装了一个react,但Next.js打包时会区分)
3. 开发环境缓存没清干净,可以试试删掉node_modules/.vite和.next/cache
顺便说个坑:如果你用TS,有时候IDE自动导入会给你生成错误的import语句,记得检查一下是不是按我说的方式导入的。
最后可以看下package.json确认react和react-dom版本匹配(比如都是18.2.x),版本太乱也可能出幺蛾子。