React Hooks 报错?一招解决useState问题

文章目录

问题

在使用import { useState } from "react";时报错:You're importing a component that needs useState. This React Hook only works in a Client Component. To fix, mark the file (or its parent) with the "use client" directive.

javascript 复制代码
import TodoFilter from "./components/TodoFilter";
import TodoList from "./components/TodoList";
import AddTodo from "./components/AddTodo";
import TodoItem from "./components/TodoItem";
import { useState } from "react";

export default function Home() {
  const [todos, setTodos] = useState([]);
  return (
    <div>
      <h1>TodoList</h1>
      <AddTodo />
      <TodoList />  
      <TodoFilter />
    </div>
  )
}

分析

这个错误是因为在 Next.js 13+App Router 中,默认情况下所有组件都是服务器组件(Server Components),而 useStateReact Hooks 只能在客户端组件(Client Components)中使用。

解决方案很简单,需要在文件顶部添加 "use client" 指令,将这个组件标记为客户端组件。应修改 page.tsx 文件为:

javascript 复制代码
"use client";

import TodoFilter from "./components/TodoFilter";
import TodoList from "./components/TodoList";
import AddTodo from "./components/AddTodo";
import TodoItem from "./components/TodoItem";
import { useState } from "react";

// ... 其余代码保持不变 ...
相关推荐
灰海2 小时前
vue中通过heatmap.js实现热力图(多个热力点)热区展示(带鼠标移入弹窗)
前端·javascript·vue.js·heatmap·heatmapjs
王源骏2 小时前
LayaAir鼠标(手指)控制相机旋转,限制角度
前端
大虾写代码3 小时前
vue3+TS项目配置Eslint+prettier+husky语法校验
前端·vue·eslint
wordbaby3 小时前
用 useEffectEvent 做精准埋点:React analytics pageview 场景的最佳实践与原理剖析
前端·react.js
上单带刀不带妹3 小时前
在 ES6 中如何提取深度嵌套的对象中的指定属性
前端·ecmascript·es6
excel3 小时前
使用热力贴图和高斯函数生成山峰与等高线的 WebGL Shader 解析
前端
wyzqhhhh3 小时前
组件库打包工具选型(npm/pnpm/yarn)的区别和技术考量
前端·npm·node.js
码上暴富3 小时前
vue2迁移到vite[保姆级教程]
前端·javascript·vue.js
土了个豆子的4 小时前
04.事件中心模块
开发语言·前端·visualstudio·单例模式·c#