next.js 使用表单输入作为常量导入到API终结点

oprakyz7  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(74)

我是React的新手,我在Next.js应用程序中遇到了导入和导出的问题。我想从表单组件导出一个常量到API端点,以便在函数中使用它。
我将表单组件变量填充到console.log(formData)中,但它没有像我期望的那样传递到我的端点。
下面是我的FormComponent代码。我想从表单中导出要在API端点中使用的数据。

import { useState } from 'react';

export let formData = {
  name: '',
  email: '',
  message: '',
};

const FormComponent = () => {
  const [localFormData, setLocalFormData] = useState(formData);

  const handleChange = (e) => {
    setLocalFormData((prevState) => ({
      ...prevState,
      [e.target.name]: e.target.value,
    }));
  };

  const handleSubmit = (e) => {
    e.preventDefault();
    formData = localFormData;
    console.log(formData);
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        Name:
        <input
          type="text"
          name="name"
          value={localFormData.name}
          onChange={handleChange}
        />
      </label>
      <br />
      <label>
        Email:
        <input
          type="email"
          name="email"
          value={localFormData.email}
          onChange={handleChange}
        />
      </label>
      <br />
      <label>
        Message:
        <textarea
          name="message"
          value={localFormData.message}
          onChange={handleChange}
        />
      </label>
      <br />
      <button type="submit">Submit</button>
    </form>
  );
};

export default FormComponent;

字符串
然后,为了将该状态导入到我的API端点,我使用以下命令,但formData仍然未定义。

import { formData } from './FormComponent';
export default async function handler(req) {
try{
const results= ${formData.email}
}
}

e5nszbig

e5nszbig1#

您的handler是在服务器上运行的API Route,而您要导出和操作的formData在客户机上。您不能使用export/import在两者之间交换数据。
您需要将数据作为POST请求的一部分发送到API,例如:

import { useState } from "react";

const FormComponent = () => {
  const [formData, setFormData] = useState({
    name: "",
    email: "",
    message: "",
  });

  const handleChange = (e) => {
    setFormData((prevState) => ({
      ...prevState,
      [e.target.name]: e.target.value,
    }));
  };

  const handleSubmit = async (e) => {
    e.preventDefault();
    const res = await fetch("/api/endpoint", {
      headers: {
        "Content-Type": "application/json",
      },
      method: "POST",
      body: JSON.stringify(formData),
    });
    const data = await res.json();
    console.log(data);
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        Name:
        <input type="text" name="name" value={formData.name} onChange={handleChange} />
      </label>
      <br />
      <label>
        Email:
        <input type="email" name="email" value={formData.email} onChange={handleChange} />
      </label>
      <br />
      <label>
        Message:
        <textarea name="message" value={formData.message} onChange={handleChange} />
      </label>
      <br />
      <button type="submit">Submit</button>
    </form>
  );
};

export default FormComponent;

个字符

相关问题