我正在开发一个 NextJS 14 项目,并努力实现新的“服务器操作”功能,该功能在一段时间前引入了我的 NextJS,作为常规 API 调用的替代方案。这是我的 LoginForm.tsx
文件的精简版本:
"use client"
import { useForm } from "react-hook-form"
import { zodResolver } from "@hookform/resolvers/zod"
import * as z from "zod"
import CardWrapper from "@/components/auth/CardWrapper"
import { LoginSchema } from "@/schemas"
import { Input } from "@/components/ui/input"
import { Button } from "@/components/ui/button"
import { login } from "@/app/actions/login"
export default function LoginForm() {
const form = useForm<z.infer<typeof LoginSchema>>({
resolver: zodResolver(LoginSchema),
defaultValues: {
email: "",
password: "",
},
})
function doSomething() {
login("test")
}
return (
<form className="space-y-6" onSubmit={doSomething}>
<Input placeholder="[email protected]" type="email" />
<Input placeholder="********" type="password" />
<Button type="submit" className="w-full">
Login
</Button>
</form>
)
}
在这里,我导入带有
actions/login.ts
指令的
use server
文件,作为表单有效负载的服务器端接收者:"use server"
export const login = (values: any) => {
console.log(values)
}
export default login
执行时,表单的提交操作会触发一个
doSomething()
方法,该方法将一个简单的字符串发送到
actions/login.ts
处的服务器端函数,这应该触发所传递字符串的服务器端 console log()
。但它会抛出这个错误:
TypeError:无法重新定义属性:$$id
在 Function.defineProperties ()
在评估(./src/app/actions/login.ts:22:81)
在 (action-browser)/./src/app/actions/login.ts (C:\Users\91877\Documents\Project\poco.next\server pp uth\login\page.js:399:1)
在函数中。webpack_require(C:\ Users \ 91877 \ Documents \ Project \ poco.next \ server \ webpack-runtime.js:33:42)
我可能会错过什么?
我期待服务器终端上的字符串值“test”的console.log。