关于RTK-query中skip选项执行时机的疑问求助
问题解答
这是正常的JavaScript行为,并非RTK Query的设计问题,也不是你的用法错误。
原因分析
JavaScript在调用函数时,会先计算所有传入的参数表达式,再执行函数本身。所以在你的代码里:
const {data} = useGetMyDataQuery(getMyParams(), {skip: myCondition});
不管skip的值是什么,getMyParams()都会先被调用执行,之后才会把它的返回值和skip选项传给useGetMyDataQuery钩子。RTK Query根本没机会在参数计算前检查skip——因为这是JS引擎的执行顺序决定的。
解决方法
要实现"skip为true时不执行参数相关代码"的需求,你有两种常见方案:
条件判断包裹调用
在调用钩子前先判断跳过条件,只有当不需要跳过的时候才执行参数逻辑:let data; if (!myCondition) { const params = getMyParams(); ({data} = useGetMyDataQuery(params)); }使用可选链/默认值避免错误
如果必须在钩子调用里写参数逻辑,可以用可选链或默认值确保即使skip为true时,参数代码也不会抛出错误:const {data} = useGetMyDataQuery( myObject?.params || {}, {skip: !myObject} );
内容的提问来源于stack exchange,提问作者RezKesh
相关产品推荐
相关产品推荐

