我试图实现一个轮询与redux工具包RTK查询。我的需要是执行轮询只有固定的次数(这个次数来自预加载的配置).轮询本身的过程非常简单,根据文档,我看到在钩子中添加选项pollingInterval
就足够了,但我不明白如何才能实现只执行固定次数的轮询。
我的服务
- service.ts*
export const landingPageApi = createApi({
reducerPath: 'landingPageApi',
baseQuery: dynamicBaseQuery,
endpoints: (builder) => ({
...,
deepCheck: builder.query<HttpResponse<PaymentTransactionResponse>, { paymentId: string; deepCheck: boolean }>({
query: ({ paymentId, deepCheck }) => `some-url`,
async onQueryStarted(queryArg, { dispatch, queryFulfilled }) {
const { data } = await queryFulfilled
const { payload } = data
dispatch(updateTransactions(data.payload.transactionList ?? []))
},
})
}),
})
字符串
在我的React组件中,我使用自动创建的钩子useDeepCheckQuery
,并尝试以这种方式执行轮询
- 组件.tsx*
export function TransactionDetail(props: Props) {
let pollingCount = 0;
// some code ...
const {} = useDeepCheckQuery(
{
paymentId: props.paymentId,
deepCheck: pollingCount++ === 3,
},
{
skip: pollingCount++ > 3 && !['PMT_IN_PRGS', 'PAYMENT_STARTED'].includes(props.transaction.status),
pollingInterval: 3000,
},
)
型
但它不起作用
例如,如果固定次数为3次,则需要执行API调用3次,前2次使用属性deepCheck=false
x,最后一次使用属性deepCheck=true
x。
1条答案
按热度按时间wd2eg0qa1#
我正在解决同样的问题。我还没有找到解决方案,我会尝试你的方法来增加轮询计数。但我看到你的初始化轮询计数中有一个缺陷。它在每次渲染时总是0。你需要把它放在
useState
中。