✊🏿 Black Lives Matter. Please consider donating to Black Girls Code today.
🧬 Learn how to build RNA-Seq data apps with Python & Dash. Register for the May 20 Webinar!

dcc.Loading still showing when returning dash.no_update in callback

Hello,

I have a dcc.Loading() which contains a graph. This graph is updated through some user interactions but also through a dcc.Interval().

The issue comes when I sometimes need to ignore the callback if it’s triggered by the dcc.Interval(). Which I do by filtering the callback trigger and returning dash.no_update in a specific case.

However, the dcc.Loading animation still displays at each interval and the graph flickers even though I am returning dash.no_update

Here is a simplified sample code of what I have:

Layout

        dcc.Interval(
            id = 'graph-update',
            interval = 4000,
        ),
        dcc.Loading(
            id = "loading",
            children=[
                dcc.Graph(
                    id = 'plot',
                ),
            ]
        ),

Callback

        @app.callback(
            [
                Output('plot', 'figure'),
            ],
            [
                Input('graph-update', 'n_intervals')
            ],
            [
                State('plot', 'figure'),
            ],
        )
        def update(self, n, figure):

            ctx = dash.callback_context
            trigger_id = ctx.triggered[0]["prop_id"].split(".")[0]

            if (trigger_id == 'graph-update'):
                # raise dash.exceptions.PreventUpdate
                return dash.no_update

            return [figure]

How can I stop the dcc.Loading() component from showing when the callback function returns dash.no_update?

I have also tried raising an exception instead of returning dash.no_update but the result is the same.

Thank you