夭桃鸣鹿 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日