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执行完之后的值吗?
如果有相关解释的文章,如果可以,请粘贴一下文章链接,谢谢

有可能 啊 , 因为你是 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看看 。我试的可能不对 ,你自己也验证一下,如果我错了,误导你了 ,你直接告诉我就行,也算学习巩固了

应该不可能,就如你所说的,那个作用域已经保留了上次的值,react 重新渲染的时候,会调用整个组件的函数,重新赋值,整个作用域都变了,那个 deleteData 也变了,所以,之前调用的 deleteData 按道理还是之前的作用域。
很久没用 react 了,所以我的回答未必是对的,只能作为你的参考了