首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setState()不在useEffect()内部工作;

setState()不在useEffect()内部工作;
EN

Stack Overflow用户
提问于 2022-04-30 12:37:34
回答 1查看 189关注 0票数 -1

我从我的Mongo数据库中获取了一些数据,它作为一个对象返回到我的useEffect钩子函数中,即我的代码中的response。然后,我声明一个状态myorders,并希望最终从API.And中设置它的值。我想将这些数据映射到UI中的不同行。

但问题是,当我试图通过传递setState()函数中的获取命令在组件中传递setState ()函数时,它返回一个空对象。Console.log(状态)显示一个空数组。

代码

代码语言:javascript
复制
import React, { useEffect, useState } from "react";
import { useRouter } from "next/router";

const Orders = () => {
  const router = useRouter();
  const [myorders, setMyorders] = useState();

  useEffect(() => {
    const fectOrders = async () => {

        let a = await fetch(`${process.env.NEXT_PUBLIC_HOST}/api/myorders`, {
          method: "POST", // or 'PUT'
          headers: {
            "Content-Type": "application/json",
          },
          body: JSON.stringify({ token: localStorage.getItem("token") }),
        });
        let response = await a.json();
        console.log("RES = ",response)
        setMyorders(response.myorders)
        console.log("MY = ",myorders)
      }

      if (!localStorage.getItem("token")) {
        router.push("/");
      } else {
        fectOrders();
      }
  }, []);

  

  return (
    <div className="container mx-auto">
      <h1 className="font-bold text-center text-2xl p-8">My Orders</h1>
      <div className="flex flex-col">
        <div className="overflow-x-auto sm:-mx-6 lg:-mx-8">
          <div className="py-2 inline-block min-w-full sm:px-6 lg:px-8">
            <div className="overflow-hidden">
              <table className="min-w-full border-[1px]">
                .
                .
                .
              </table>
            </div>
          </div>
        </div>
      </div>
    </div>
  );
};



export default Orders;

ANd我得到了这些值

如您所见,API正在返回值,但setState()不起作用。

该怎么办?

EN

回答 1

Stack Overflow用户

发布于 2022-04-30 12:56:10

我在useEffect中添加了useEffect作为依赖项来解决这个问题,

所以我的useEffect是这样的

代码语言:javascript
复制
  useEffect(() => {
    const fectOrders = async () => {

        let a = await fetch(`${process.env.NEXT_PUBLIC_HOST}/api/myorders`, {
          method: "POST", // or 'PUT'
          headers: {
            "Content-Type": "application/json",
          },
          body: JSON.stringify({ token: localStorage.getItem("token") }),
        });
        let response = await a.json();
        console.log("RES = ",response)
        //setMyorders(response.myorders)
        console.log("MY = ",myorders)
        return response.myorders;
      }

      if (!localStorage.getItem("token")) {
        router.push("/");
      } else {
        fectOrders().then((ord)=>setMyorders(ord)).catch((err)=>console.log(err));
      }
  }, [myorders]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72068602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档