RTK Query请求报错时不失效指定标签,现有方案外是否有更优解?
更优解决方案:利用
error参数或手动控制失效标签 方案一:直接通过error参数判断(更精准)
你当前的方案通过result是否存在来判断,但invalidatesTags的回调函数其实还接收第二个参数error——直接判断error是否存在,逻辑会更清晰精准,毕竟请求报错时error一定会有值,而result为空的场景可能不止报错一种:
dosomething: builder.mutation<void, number>({ query: (id) => ({ url: `api`, method: 'PATCH', }), invalidatesTags: (result, error) => error ? [] : ['REFETCH_TYPE'], }),
方案二:用onQueryStarted手动控制(更灵活)
如果需要搭配更复杂的业务逻辑(比如成功后先执行其他操作再触发标签失效),可以用onQueryStarted生命周期钩子,只在请求成功时手动触发标签失效:
dosomething: builder.mutation<void, number>({ query: (id) => ({ url: `api`, method: 'PATCH', }), async onQueryStarted(id, { dispatch, queryFulfilled }) { try { await queryFulfilled; // 请求成功才触发标签失效 dispatch(api.util.invalidateTags(['REFETCH_TYPE'])); } catch (err) { // 请求失败时不执行任何标签失效操作 } }, }),
这两种方案都比单纯判断result更可靠:第一种逻辑直白,直接关联报错状态;第二种适合需要自定义流程的场景,能完全掌控标签失效的时机。
内容的提问来源于stack exchange,提问作者Rostyk
相关产品推荐
相关产品推荐

