redux-toolkit icon indicating copy to clipboard operation
redux-toolkit copied to clipboard

Mutation get stuck in pending state

Open LucasHimelfarb opened this issue 1 year ago • 20 comments

In my React Native application, I implement React Navigation and have two stack navigators... After replacing one with the other, a screen is rendered that will make two requests using RTK Query. The first is a simple query to obtain some authorization tokens, which resolves without any issues. The second is a mutation that implements a queryFn...

Screenshot 2024-06-06 at 2 17 26 PM

and those queries called in my screen:

Screenshot 2024-06-06 at 2 19 10 PM

But the getCredits mutation never resolve with success even if the requests defined in queryFn was resolved, the data value is unfilled in the screen side and the flag isLoading is always true.

All works fine when the replace of stack navigators never happens

LucasHimelfarb avatar Jun 06 '24 17:06 LucasHimelfarb

I fear this is way too specific for any of us to reproduce and look at - if you can build some more generic reproduction that we can actually run, we could take a look, but like this I'm not sure we can help you, sorry :/

phryneas avatar Jun 06 '24 20:06 phryneas

@phryneas It s a company project so is hard to share a reproducible case for u. But I swear my implementation is so simple like that. May be is useful look my root navigator:

Screenshot 2024-06-06 at 5 34 21 PM

LucasHimelfarb avatar Jun 06 '24 20:06 LucasHimelfarb

@phryneas and funny fact: if I remove all code lines on queryFn and just return an empty array the problem persist

LucasHimelfarb avatar Jun 06 '24 20:06 LucasHimelfarb

Can you tell us what version of Redux-toolkit, React-Redux, React-Native and React you're running? Maybe that'll give some sort of clue as to where the issue is coming from.

aryaemami59 avatar Jun 06 '24 21:06 aryaemami59

@aryaemami59 of course...

"@reduxjs/toolkit": "2.2.5"
"react-redux": "9.1.0",
"react-native": "0.73.5",
"react": "18.2.0",

LucasHimelfarb avatar Jun 06 '24 21:06 LucasHimelfarb

after many hours trying different approaches I can't get it... I think it is a bug related between RTKQuery and react-navigation/native

LucasHimelfarb avatar Jun 07 '24 05:06 LucasHimelfarb

@LucasHimelfarb Can you add this to your package.json's dependencies and try again?

"@reduxjs/toolkit": "https://pkg.csb.dev/reduxjs/redux-toolkit/commit/d86ec94b/@reduxjs/toolkit",

aryaemami59 avatar Jun 07 '24 18:06 aryaemami59

Thanks for u suggest @aryaemami59

Getting the same behavior :/

LucasHimelfarb avatar Jun 07 '24 18:06 LucasHimelfarb

@LucasHimelfarb this is a longshot, but can you also try with the most recent React-Redux version?

aryaemami59 avatar Jun 07 '24 19:06 aryaemami59

@aryaemami59 I tried it together with the last thing you shared with me and with the latest version of react-redux (9.1.2) and I get the same behavior

LucasHimelfarb avatar Jun 07 '24 19:06 LucasHimelfarb

@LucasHimelfarb Then in that case, I think our best bet is if you put together a small repro, I understand it's probably time consuming, but it's very difficult to tell what's going on without having a sample of the problem to look at.

aryaemami59 avatar Jun 07 '24 22:06 aryaemami59

Hello when a navigator stack is replaced, is it possible that the mutation state is lost or reset ?

Almada2021 avatar Jun 10 '24 12:06 Almada2021

@aryaemami59 In this week I can't build a repo to reproduce the error because my job... but I'll try to do it on the weekend.... @Almada2021 I think no, I don't see any repeat log or actions dispatched twice

LucasHimelfarb avatar Jun 10 '24 12:06 LucasHimelfarb

@LucasHimelfarb Awesome. Let me know when you do so I can take a look.

aryaemami59 avatar Jun 20 '24 01:06 aryaemami59

I am facing this same issue. I will also note that uninitialized is true. @LucasHimelfarb if you console.log isUninitialized, is it true? You can export if from your mutation dict along with isLoading, isError, etc...

teaglebuilt avatar Jun 22 '24 13:06 teaglebuilt

Might this be related? I would try rolling back to v2.2.3 to confirm that v2.2.4 changes is the cause if the issue here.

https://github.com/reduxjs/redux-toolkit/issues/4449

david10sing avatar Jun 27 '24 23:06 david10sing

@aryaemami59 new update: this happened only with queryFn thats not return a string as a data

LucasHimelfarb avatar Jul 03 '24 07:07 LucasHimelfarb

@LucasHimelfarb sorry you said this only happens if queryFn returns something other than a string? Do you have a small example or maybe even a code snippet? I can take a closer look, I just need to know what to look for.

aryaemami59 avatar Jul 10 '24 05:07 aryaemami59

@aryaemami59

To replicate this error I found a common way:

create a simple slice, from any react component dispatch this object to set in that reducer:

{ "tipo_credito": "E", "descripcion_tipo_credito": "Efectivo", "numero_sucursal": "180", "numero_credito": "0030769", "empresa": "FRAVEGA", "capital_solicitado": 5000, "cantidad_total_cuotas": 18, "cantidad_cuotas_pagas": 1, "tipo_documento": "D", "numero_documento": "", "nombre_apellido": "", "estado": { "codigo": "1", "descripcion": "Al dia" }, "fecha_vencimiento1a_cuota": "2025-07-24", "nueva_fecha_vencimiento": null, "cobrador": null, "cantidad_refinanciaciones": 0, "empleador_del_cliente": null, "moneda": "P", "ult_cuo_paga_antes_refinanciar": null, "acuerdo_pago": false, "frecuencia_vencimiento": { "codigo": "1", "descripcion": "Mensual" }, "cartera_credito": "ER", "numero_sucursal_acuerdo": null, "numero_credito_acuerdo": null, "cartera_original": "ER", "importe_total": 6064.02, "importe_interes": 1003.38, "saldo_credito": 5727.13, "importe_total_a_pagar_prorroga": 0, "gasto_refinanciacion": 0, "descuento_por_cancelacion_anticipada": 0, "importe_gastos_cobranzas": 0, "importe_bonificacion_gastos_cobranzas": 0, "financiador": { "codigo": "FR", "descripcion": "FRÁVEGA SOCIEDAD ANONIMA" }, "fecha_alta": "2025-06-24", "categoria_cliente": "A", "fecha_pase_legales": null, "cuotas": [ { "numero_cuota": 2, "estado": { "codigo": "1", "descripcion": "Al dia" }, "fecha_vencimiento": "2025-08-24", "cantidad_dias_de_atraso": 0, "importe_total_a_pagar": 336.89, "es_cobrable": false, "importe_cuota_pura": 336.89, "importe_punitorios": 0, "importe_gastos_cobranzas": 0, "importe_bonificacion_gastos_cobranzas": 0, "importe_legales": 0, "importe_bonificacion_punitorios": 0, "importe_seguro_de_vida": 0, "descuento_por_cancelacion_anticipada": 0, "importe_comision_boca_cobranza": 0 }, { "numero_cuota": 3, "estado": { "codigo": "1", "descripcion": "Al dia" }, "fecha_vencimiento": "2025-09-24", "cantidad_dias_de_atraso": 0, "importe_total_a_pagar": 336.89, "es_cobrable": false, "importe_cuota_pura": 336.89, "importe_punitorios": 0, "importe_gastos_cobranzas": 0, "importe_bonificacion_gastos_cobranzas": 0, "importe_legales": 0, "importe_bonificacion_punitorios": 0, "importe_seguro_de_vida": 0, "descuento_por_cancelacion_anticipada": 0, "importe_comision_boca_cobranza": 0 }, { "numero_cuota": 4, "estado": { "codigo": "1", "descripcion": "Al dia" }, "fecha_vencimiento": "2025-10-24", "cantidad_dias_de_atraso": 0, "importe_total_a_pagar": 336.89, "es_cobrable": false, "importe_cuota_pura": 336.89, "importe_punitorios": 0, "importe_gastos_cobranzas": 0, "importe_bonificacion_gastos_cobranzas": 0, "importe_legales": 0, "importe_bonificacion_punitorios": 0, "importe_seguro_de_vida": 0, "descuento_por_cancelacion_anticipada": 0, "importe_comision_boca_cobranza": 0 }, { "numero_cuota": 5, "estado": { "codigo": "1", "descripcion": "Al dia" }, "fecha_vencimiento": "2025-11-24", "cantidad_dias_de_atraso": 0, "importe_total_a_pagar": 336.89, "es_cobrable": false, "importe_cuota_pura": 336.89, "importe_punitorios": 0, "importe_gastos_cobranzas": 0, "importe_bonificacion_gastos_cobranzas": 0, "importe_legales": 0, "importe_bonificacion_punitorios": 0, "importe_seguro_de_vida": 0, "descuento_por_cancelacion_anticipada": 0, "importe_comision_boca_cobranza": 0 }, { "numero_cuota": 6, "estado": { "codigo": "1", "descripcion": "Al dia" }, "fecha_vencimiento": "2025-12-24", "cantidad_dias_de_atraso": 0, "importe_total_a_pagar": 336.89, "es_cobrable": false, "importe_cuota_pura": 336.89, "importe_punitorios": 0, "importe_gastos_cobranzas": 0, "importe_bonificacion_gastos_cobranzas": 0, "importe_legales": 0, "importe_bonificacion_punitorios": 0, "importe_seguro_de_vida": 0, "descuento_por_cancelacion_anticipada": 0, "importe_comision_boca_cobranza": 0 }, { "numero_cuota": 7, "estado": { "codigo": "1", "descripcion": "Al dia" }, "fecha_vencimiento": "2026-01-24", "cantidad_dias_de_atraso": 0, "importe_total_a_pagar": 336.89, "es_cobrable": false, "importe_cuota_pura": 336.89, "importe_punitorios": 0, "importe_gastos_cobranzas": 0, "importe_bonificacion_gastos_cobranzas": 0, "importe_legales": 0, "importe_bonificacion_punitorios": 0, "importe_seguro_de_vida": 0, "descuento_por_cancelacion_anticipada": 0, "importe_comision_boca_cobranza": 0 }, { "numero_cuota": 8, "estado": { "codigo": "1", "descripcion": "Al dia" }, "fecha_vencimiento": "2026-02-24", "cantidad_dias_de_atraso": 0, "importe_total_a_pagar": 336.89, "es_cobrable": false, "importe_cuota_pura": 336.89, "importe_punitorios": 0, "importe_gastos_cobranzas": 0, "importe_bonificacion_gastos_cobranzas": 0, "importe_legales": 0, "importe_bonificacion_punitorios": 0, "importe_seguro_de_vida": 0, "descuento_por_cancelacion_anticipada": 0, "importe_comision_boca_cobranza": 0 }, { "numero_cuota": 9, "estado": { "codigo": "1", "descripcion": "Al dia" }, "fecha_vencimiento": "2026-03-24", "cantidad_dias_de_atraso": 0, "importe_total_a_pagar": 336.89, "es_cobrable": false, "importe_cuota_pura": 336.89, "importe_punitorios": 0, "importe_gastos_cobranzas": 0, "importe_bonificacion_gastos_cobranzas": 0, "importe_legales": 0, "importe_bonificacion_punitorios": 0, "importe_seguro_de_vida": 0, "descuento_por_cancelacion_anticipada": 0, "importe_comision_boca_cobranza": 0 }, { "numero_cuota": 10, "estado": { "codigo": "1", "descripcion": "Al dia" }, "fecha_vencimiento": "2026-04-24", "cantidad_dias_de_atraso": 0, "importe_total_a_pagar": 336.89, "es_cobrable": false, "importe_cuota_pura": 336.89, "importe_punitorios": 0, "importe_gastos_cobranzas": 0, "importe_bonificacion_gastos_cobranzas": 0, "importe_legales": 0, "importe_bonificacion_punitorios": 0, "importe_seguro_de_vida": 0, "descuento_por_cancelacion_anticipada": 0, "importe_comision_boca_cobranza": 0 }, { "numero_cuota": 11, "estado": { "codigo": "1", "descripcion": "Al dia" }, "fecha_vencimiento": "2026-05-24", "cantidad_dias_de_atraso": 0, "importe_total_a_pagar": 336.89, "es_cobrable": false, "importe_cuota_pura": 336.89, "importe_punitorios": 0, "importe_gastos_cobranzas": 0, "importe_bonificacion_gastos_cobranzas": 0, "importe_legales": 0, "importe_bonificacion_punitorios": 0, "importe_seguro_de_vida": 0, "descuento_por_cancelacion_anticipada": 0, "importe_comision_boca_cobranza": 0 }, { "numero_cuota": 12, "estado": { "codigo": "1", "descripcion": "Al dia" }, "fecha_vencimiento": "2026-06-24", "cantidad_dias_de_atraso": 0, "importe_total_a_pagar": 336.89, "es_cobrable": false, "importe_cuota_pura": 336.89, "importe_punitorios": 0, "importe_gastos_cobranzas": 0, "importe_bonificacion_gastos_cobranzas": 0, "importe_legales": 0, "importe_bonificacion_punitorios": 0, "importe_seguro_de_vida": 0, "descuento_por_cancelacion_anticipada": 0, "importe_comision_boca_cobranza": 0 }, { "numero_cuota": 13, "estado": { "codigo": "1", "descripcion": "Al dia" }, "fecha_vencimiento": "2026-07-24", "cantidad_dias_de_atraso": 0, "importe_total_a_pagar": 336.89, "es_cobrable": false, "importe_cuota_pura": 336.89, "importe_punitorios": 0, "importe_gastos_cobranzas": 0, "importe_bonificacion_gastos_cobranzas": 0, "importe_legales": 0, "importe_bonificacion_punitorios": 0, "importe_seguro_de_vida": 0, "descuento_por_cancelacion_anticipada": 0, "importe_comision_boca_cobranza": 0 }, { "numero_cuota": 14, "estado": { "codigo": "1", "descripcion": "Al dia" }, "fecha_vencimiento": "2026-08-24", "cantidad_dias_de_atraso": 0, "importe_total_a_pagar": 336.89, "es_cobrable": false, "importe_cuota_pura": 336.89, "importe_punitorios": 0, "importe_gastos_cobranzas": 0, "importe_bonificacion_gastos_cobranzas": 0, "importe_legales": 0, "importe_bonificacion_punitorios": 0, "importe_seguro_de_vida": 0, "descuento_por_cancelacion_anticipada": 0, "importe_comision_boca_cobranza": 0 }, { "numero_cuota": 15, "estado": { "codigo": "1", "descripcion": "Al dia" }, "fecha_vencimiento": "2026-09-24", "cantidad_dias_de_atraso": 0, "importe_total_a_pagar": 336.89, "es_cobrable": false, "importe_cuota_pura": 336.89, "importe_punitorios": 0, "importe_gastos_cobranzas": 0, "importe_bonificacion_gastos_cobranzas": 0, "importe_legales": 0, "importe_bonificacion_punitorios": 0, "importe_seguro_de_vida": 0, "descuento_por_cancelacion_anticipada": 0, "importe_comision_boca_cobranza": 0 }, { "numero_cuota": 16, "estado": { "codigo": "1", "descripcion": "Al dia" }, "fecha_vencimiento": "2026-10-24", "cantidad_dias_de_atraso": 0, "importe_total_a_pagar": 336.89, "es_cobrable": false, "importe_cuota_pura": 336.89, "importe_punitorios": 0, "importe_gastos_cobranzas": 0, "importe_bonificacion_gastos_cobranzas": 0, "importe_legales": 0, "importe_bonificacion_punitorios": 0, "importe_seguro_de_vida": 0, "descuento_por_cancelacion_anticipada": 0, "importe_comision_boca_cobranza": 0 }, { "numero_cuota": 17, "estado": { "codigo": "1", "descripcion": "Al dia" }, "fecha_vencimiento": "2026-11-24", "cantidad_dias_de_atraso": 0, "importe_total_a_pagar": 336.89, "es_cobrable": false, "importe_cuota_pura": 336.89, "importe_punitorios": 0, "importe_gastos_cobranzas": 0, "importe_bonificacion_gastos_cobranzas": 0, "importe_legales": 0, "importe_bonificacion_punitorios": 0, "importe_seguro_de_vida": 0, "descuento_por_cancelacion_anticipada": 0, "importe_comision_boca_cobranza": 0 }, { "numero_cuota": 18, "estado": { "codigo": "1", "descripcion": "Al dia" }, "fecha_vencimiento": "2026-12-24", "cantidad_dias_de_atraso": 0, "importe_total_a_pagar": 336.89, "es_cobrable": false, "importe_cuota_pura": 336.89, "importe_punitorios": 0, "importe_gastos_cobranzas": 0, "importe_bonificacion_gastos_cobranzas": 0, "importe_legales": 0, "importe_bonificacion_punitorios": 0, "importe_seguro_de_vida": 0, "descuento_por_cancelacion_anticipada": 0, "importe_comision_boca_cobranza": 0 } ], "codigos_articulos_relacionados": [ "999993" ], "bonificaciones_punitorios_vigentes": [], "canal": "FVG-DIGITAL", "tipo_propuesta_pago": null, "email": "", "tipo_solicitud": "A", "plan": "EM", "sellados": 60.64, "tipo_legajo": "digital", "importe_cuota": 336.89, "fecha_ultima_actualizacion": "2025-06-24T20:33:49.523+00:00", "tem": 1.61, "cantidad_cuotas_descuento": 0 }

And that's all ☠️

LucasHimelfarb avatar Jun 25 '25 18:06 LucasHimelfarb

@LucasHimelfarb that's an awful lot of JSON, without any context as to what the app is actually intending to do with it.

Could you provide an actual runnable reproduction of this issue?

markerikson avatar Jun 25 '25 21:06 markerikson

Closing due to lack of a repro for us to look at.

markerikson avatar Aug 02 '25 16:08 markerikson