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,提问作者Сергей
相关产品推荐
相关产品推荐

