切换账号后页面还是上一个用户的订单,控制台打印的 userId 已经变了,effect 里的请求没有再发出去,列表停在旧账号的数据上。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,effect 里读了 userId 却没写进依赖数组,React 只在首次挂载时执行一次,闭包里捕获的还是第一次拿到的那个值,后续 props 变化它完全不知道,也不会补发请求。

「useEffect 依赖遗漏」这类改动最怕改一半,回滚脚本先准备好,再动生产。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

useEffect(() => { fetchOrders(userId); }, [userId]);
'react-hooks/exhaustive-deps': 'warn'

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

具体做法是,把 effect 里读到的响应式变量全部写进依赖数组,一项都别漏;拉数据的函数定义在 effect 内部,避免再多一个依赖项;打开 eslint 的 hooks 规则,提交前逐项检查遗漏。

最后用这个标准收尾,切换账号后接口重新请求,列表立刻显示当前用户的订单,不再停在旧数据上。

作者 9823189