NextJS 14 服务器操作抛出“无法重新定义属性”错误

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

我正在开发一个 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。

reactjs next.js form-submit onsubmit server-action
1个回答
0
投票
here

进行了讨论。 看起来你需要

"use server" export const login = (values: any) => { console.log(values) } export default login

更改为

"use server" const login = (values: any) => { console.log(values) } export default login

希望这对你有用!!

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