错误:函数无法直接传递给客户端组件

问题描述 投票:0回答:1

我正在使用 nextjs 14 应用程序路由器。但我收到错误:“错误:函数无法直接传递给客户端组件,除非您通过用“使用服务器”标记来显式公开它。或者您可能想调用此函数而不是返回它。”

我的问题是,当我的代码中没有客户端组件时,为什么会出现提及客户端组件的错误消息。

//index.js
export const handleSubmit = async(formData) => {
    console.log(formData.get("name"));
}
//AddTaskForm.jsx
import {handleSubmit} from "@/app/action/index"
const AddTaskForm = () => {
    return (
        <form action={handleSubmit} className="mt-10 flex flex-col gap-4 w-[300px] mx-auto">
            <div className="flex flex-col gap-2">
                <label htmlFor="name">Name</label>
                <input className="border border-black" type="text" id="name" name="name" />
            </div>
            <button type="submit" className="bg-purple-500 py-2">Submit</button>
        </form>
    );
};
export default AddTaskForm;
//page.js
import AddTaskForm from '@/app/ui/AddTaskForm';
export default function Home() {
  return (
    <AddTaskForm/>
  );
}

错误消息是否具有误导性?

next.js app-router nextjs14
1个回答
0
投票

看起来每个人都觉得错误报告非常具有误导性。看看这个:

错误:函数无法直接传递给客户端组件,除非您通过使用“使用服务器”标记来显式公开它

由于某种原因,我们无法将

handleSubmit
函数直接分配给
action
属性,这是 Next.js 不允许的,除非我们使用
handleSubmit
指令声明
useServer
函数以使其在表单操作中可用,尽管您没有使用任何客户端组件


'use server'

export const handleSubmit = async (formData) => {
  console.log(formData.get('name'))
}

© www.soinside.com 2019 - 2024. All rights reserved.