我使用Nextjs.我试图从Select Items中收集值,并将它们组合到一个对象中,该对象将由API处理.但当我点击 Select 按钮时,什么也没有发生.我怎么才能解决它呢?这里的代码是: page.jsx

"use client";

import { useRouter } from "next/navigation";
import { useEffect, useState } from "react";
// import useSession từ next-auth để xử lí authentication
import { useSession } from "next-auth/react";
import Link from "next/link";
import { toast } from "react-toastify";
import { Select, Option } from "@material-tailwind/react";

const Selectt = () => {
  const [subject, setSubject] = useState("");
  const [grade, setGrade] = useState("");
  const [show, setShow] = useState(false);

  const handleSelect = async () =>{
    // e.preventDefault();
    // console.log(subject, classes, difficulty);

    // if (!subject || !grade ) {
    //   toast.error("Hãy chọn đầy đủ các mục!");
    //   return;
    // }

    try {
      const res = await fetch("api/quiz/FilterQuestion", {
        method: "GET",
        headers: {
          "Content-Type": "application/json",
        },
        body: JSON.stringify({
          subject,
          grade,
        }),
      });

      if (res.status === 400) {
        toast.error("Không tồn tại câu hỏi thỏa mãn", {
          position: toast.POSITION.TOP_CENTER,
          className: "foo-bar",
        });
        router.push("/thithu");
      } else if (res.status === 201) {
        console.log(res.data[0])
        router.push("/home");
        toast.error("Có câu hỏi thỏa mãn!");
      } else {
        router.push("/blog");
        toast.error("Quá khó!");
      }
    } catch (error) {
      toast.error(error);
    }
  }

  return (
    <>
    <div className={`${show?'pointer-events-none opacity-0':''} flex flex-row items-center justify-center w-1/2 gap-10 m-auto`}>
      <Select
        label="Chọn môn"
        color="purple" 
        // error
        animate={{
          mount: { y: 0 },
          unmount: { y: 25 },
        }}
        value={subject}
        onChange={(subject) => setSubject(subject)}
      >
        <Option value="math">Toán</Option>
        <Option value="physics">Vật lí</Option>
        <Option value="chemistry">Hóa học</Option>
      </Select>

      <Select
        label="Chọn lớp"
        color="blue"
        // success
        animate={{
          mount: { y: 0 },
          unmount: { y: 25 },
        }}
        value={grade}
        onChange={(grade) => setGrade(grade)}
      >
        <Option value="9">Lớp 9</Option>
        <Option value="10">Lớp 10</Option>
        <Option value="11">Lớp 11</Option>
        <Option value="12">Lớp 12</Option>
      </Select>
    </div>
    <div className="flex m-auto">
    <button 
        className={`${show?'pointer-events-none opacity-0 text-none':''}bg-green-200 mt-3 p-2 rounded-md m-auto`}
        onClick={()=> handleSelect()}
        >
        Select
    </button>
    </div>
    </>
  )
}

export default Selectt;

route.js

import Question from "models/Question";
import connectDB from "config/question_database";
import { NextResponse } from "next/server";

export const GET = async (request) => {
  await connectDB();
  const { subject, grade} = await request.json();
  console.log(subject, grade);

  const selectedQuestion = Question.find({subject: subject, class: grade});
  const isSelectedQuestion = selectedQuestion? true: false;

  if (!isSelectedQuestion) {
    console.log("Không tồn tại câu hỏi thỏa mãn");
    return new NextResponse(
      JSON.stringify({ error: "Không tồn tại câu hỏi thỏa mãn yêu cầu" }), 
      { status: 400 }
    );
  } else {
    try {
      console.log("Thành công");
      return new NextResponse.json({data: selectedQuestion}, { status: 201 });
    } catch (error) {
      return new NextResponse(error, { status: 500 });
    }
  }
};

我try 了很多方法来使用MongoDB中的find()方法,但都失败了.

推荐答案

如果调用fetch("api/quiz/FilterQuestion"),它将考虑您所在的当前URL,因此您的提取将被发送到/currentUrl/api/quiz/FilterQuestion.请改用绝对路径:

const res = await fetch("/api/quiz/FilterQuestion", {
        method: "GET",
        headers: {
          "Content-Type": "application/json",
        },
        body: JSON.stringify({
          subject,
          grade,
        }),
      });

Javascript相关问答推荐

react 路由加载程序行为

使用AJX发送表单后,$_Post看起来为空

如何分配类型脚本中具有不同/额外参数的函数类型

基于变量切换隐藏文本

MongoDB中的引用

JQuery. show()工作,但. hide()不工作

为什么Mutations 观察器用微任务队列而不是macrotask队列处理?

在Three JS中看不到补间不透明度更改效果

如何在bslib nav_insert之后更改导航标签的CSS类和样式?

ChartJs未呈现

在forEach循环中获取目标而不是父对象的属性

闭包是将值复制到内存的另一个位置吗?

在浏览器中触发插入事件时检索编码值的能力

使用VUE和SCSS的数字滚动动画(&;内容生成)

传递方法VS泛型对象VS事件特定对象

FileReader()不能处理Firefox和GiB文件

每隔3个项目交替显示,然后每1个项目交替显示

P5.js中矩形内的圆弧

JSX/React -如何在组件props 中循环遍历数组

使用python,我如何判断一个html复选框是否被隐藏,以及它是否被S选中?