夭桃鸣鹿 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 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么