在这里,我在删除任务后通过react useReducer更新状态.我通过fetch API发送DELETE个请求,并在回调函数的末尾发送一个更新状态的操作.但状态不会更新.

const deleteTask = async (event) => {
    event.preventDefault();
    console.log("delete task");
    await fetch("http://localhost:3001/", {
      method: "DELETE",
      mode: "cors",
      headers: {
        "Content-type": "application/json",
      },
      body: JSON.stringify({ _id: state.task._id }),
    });
    dispatch({ type: "deleteTask", task: undefined });
  };

但当我按如下方式更改代码时:

const deleteTask = async (event) => {
    event.preventDefault();
    dispatch({ type: "deleteTask", task: undefined });
    console.log("delete task");
    await fetch("http://localhost:3001/", {
      method: "DELETE",
      mode: "cors",
      headers: {
        "Content-type": "application/json",
      },
      body: JSON.stringify({ _id: state.task._id }),
    });
  };

重新渲染发生,即状态被更新.谁能告诉我为什么会发生这种事?

这是我的delete减速器功能.

else if (action.type === "deleteTask") {
    return {
      ...state,
      isEditing: !state.isEditing,
      task: action.task,
    };
  }

推荐答案

  • 我也遇到过同样的问题.
  • 在第一种情况下,调度是在等待Fetch API并确保 你已经从后台发送了一些res.end,因为API调用总是 需要一些响应来完成API调用请求.
  • 直到它得不到任何响应才能完成API调用 函数,它将滞留在等待获取API行的代码而不是 由于API调用未完成,将调用调度操作.
  • So Make sure res.send in delete route bakcend.

也要试着这样做.

let response = await fetch(//api call//)
console.log(response)

这样你就会知道你得到的回应是什么.

我希望它能解决这个问题.如果没有...请告诉我...谢谢...!

Javascript相关问答推荐

如何将拖放功能添加到我已自定义为图像的文件输入HTML标签中?

类型脚本中只有字符串或数字键而不是符号键的对象

如何用显示网格平滑地将元素从一个地方移动到另一个地方?

docx.js:如何在客户端使用文档修补程序

XSLT处理器未运行

禁用.js文件扩展名并从目录导入隐式根index.js时,找不到NodeJS导入模块

在使用REACT更改了CSS类之后,无法更改CSS样式

当用户点击保存按钮时,如何实现任务的更改?

如何在Bootstrap中减少网格系统中单个div的宽度

Node.js错误: node 不可单击或不是元素

更改agGRID/Reaction中的单元格格式

如何在尚未创建的鼠标悬停事件上访问和着色div?

我在哪里添加过滤器值到这个函数?

对不同目录中的Angular material 表列进行排序

如何在Reaction中设置缺省值, Select 下拉列表,动态追加剩余值?

我如何才能让p5.js在不使用实例模式的情况下工作?

需要从对象生成列表

暂停后只有一次旋转JS

与find()方法一起使用时,Mongoose中的$or运算符没有提供所有必需的数据

在不使用AJAX的情况下将JavaScript数组值传递给Laravel控制器?