夭桃鸣鹿 2022-08-01 16:17 采纳率: 0%
浏览 45

axios和setstate作用域理解

react中axios和setstate在同以方法中使用,关于作用域的理解


const deleteData = () => {
    deleteId && deleteData(deleteId).then((res) => {
        // 如果当前展示的路线时删除的路线,需要执行删除绘制
        if(deleteId === showRouteId) {
            // do something
        }
    }).catch((err) => {
        console.error(err)
    }).finally(() => {
        // do something
    });
    setDeleteId('');
};

个人觉得deleteData的作用域是保持初始传进来的状态,并不会受到setstate更新
if(deleteId === showRouteId) {}判断中的deleteId有可能会是setDeleteId执行完之后的值吗?
如果有相关解释的文章,如果可以,请粘贴一下文章链接,谢谢

  • 写回答

2条回答 默认 最新

  • 崽崽的谷雨 2022-08-01 16:36
    关注

    有可能 啊 , 因为你是 promise 。这个涉及到事件循环 。你在res里打印一下 看看 。
    https://juejin.cn/post/6844903512845860872
    https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/?utm_source=html5weekly

    因为then里的 东西是异步的所以 有可能的 ,你接口返回要时间 的 。

    img

    这段代码 输出 88 确实没有 拿到 改变后的值 。
    但是 你接口 总要有个时间
    这个例子就是 100毫秒返回 数据 你会发现 它确实拿到 了 改变后的值

    img

    img

    hook里

    img

    img

    去掉 setTimeout resolove就拿不到了
    你也可以实际验证一下 。在then里打印 一下 你的deleteId看看 。我试的可能不对 ,你自己也验证一下,如果我错了,误导你了 ,你直接告诉我就行,也算学习巩固了

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 8月1日

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。