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),而 useState 等 React 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";

// ... 其余代码保持不变 ...
相关推荐
Data analyse4561 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
xiaogai_gai1 小时前
金蝶收料通知单查询策略实战教程:从源系统拉取到中间层落地的完整路径
java·前端·数据库
环境栈笔记2 小时前
指纹浏览器 WebRTC 怎么设置?从 ICE 候选、代理出口到功能验证
前端·人工智能·后端·自动化
赵大仁2 小时前
官网性能优化实战:LCP 3.2s → 2.1s、CLS 0.107 → 0,以及被我推翻的 6 个判断
前端·性能优化·cls·lcp·core web vitals
xiancai_xianyu2 小时前
Text2SQL落地生产库前,SQL要过哪三道闸
前端·数据库·sql·sql注入·text2sql·ai agent开发·企业级ai框架
小羊没烦恼!3 小时前
T-SQL查询进阶--理解SQL SERVER中的分区表
服务器·开发语言·前端·javascript·html
史瓦辛格3 小时前
给 DeepSeek Harness 写费用插件:把「这次会话花了多少钱」算准
前端·deepseek
星光不问赶路人3 小时前
Vue 3 + TypeScript 中 enum 的使用实践
前端·vue.js
鸥梨菌Honevid3 小时前
UVM 中 REQ 和 RSP 类型详解:从通信模型到 item_done 与 put_response
java·前端·servlet
IT_陈寒3 小时前
Python多进程共享变量这个坑,差点让我加班到凌晨
前端·人工智能·后端