You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RTK Query无法跳过请求:无用户时读取user.id报错求解决方案

解决RTK Query跳过请求时的运行时错误

问题根源在于:即使设置了skip: true,RTK Query的第一个参数(query参数)仍会被立即求值。当user为null或undefined时,直接访问user.id会触发Cannot read properties of null (reading 'id')的错误,和skip配置无关。

正确实现方式

你需要确保在user不存在时,不会尝试访问user.id,同时通过skip控制请求是否执行。以下两种写法都可以解决问题:

写法1:使用可选链+默认值

const { data: carts = [] as ICart[], isFetching } =
  api.useGetCartProductsQuery(user?.id ?? null, { skip: !user })
  • user?.id会在user不存在时返回undefined,避免直接访问null.id的错误;
  • ?? null是为了给query参数一个明确的占位值(也可以用undefined,取决于你的query函数定义);
  • skip: !user确保user不存在时完全跳过请求。

写法2:使用三元表达式

const { data: carts = [] as ICart[], isFetching } =
  api.useGetCartProductsQuery(user ? user.id : null, { skip: !user })
  • 通过三元表达式判断,仅当user存在时传入user.id,否则传入null;
  • 同样通过skip: !user控制请求是否执行。

补充说明

当skip为true时,RTK Query不会执行对应的query函数,所以即使传入null或undefined作为query参数,也不会影响程序运行,无需在query函数中额外处理这种情况。

内容的提问来源于stack exchange,提问作者Сергей

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:22:15