plotly / dash

Data Apps & Dashboards for Python. No JavaScript Required.
https://plotly.com/dash
MIT License
21.54k stars 2.08k forks source link

[REGRESSION] Number of no_output must match number of outputs in dash==2.18.0 #2986

Closed ndrezn closed 2 months ago

ndrezn commented 2 months ago

In dash==2.18.0, the number of no_update returned must match the number of outputs. This is not true in earlier versions of Dash.

This can be resolved by making no_update match but is a regression.

Consider:

import dash
from dash import html, dcc, Input, Output, no_update

# Initialize the Dash app
app = dash.Dash(__name__)

# Define the layout
app.layout = html.Div(
    [
        dcc.Input(id="input-box", type="text", value=""),
        html.Button("Submit", id="button"),
        html.Div(id="output-1", children="Output 1 will be displayed here"),
        html.Div(id="output-2", children="Output 2 will be displayed here"),
    ]
)

# Callback with two outputs
@app.callback(
    Output("output-1", "children"),
    Output("output-2", "children"),
    Input("button", "n_clicks"),
    Input("input-box", "value"),
)
def update_outputs(n_clicks, value):
    if n_clicks is None:
        return no_update
    return "Hello", "world!"

# Run the app
if __name__ == "__main__":
    app.run_server(debug=True)

Dash 2.18 Screenshot 2024-09-05 at 1 37 26 PM

Dash 2.17 Screenshot 2024-09-05 at 1 37 44 PM

johnkangw commented 2 months ago

@ndrezn Thanks for fixing this! I was wondering why in our apps we were receiving errors for this component.

leo-smi commented 2 months ago

@ndrezn Thanks for fixing this! I was wondering why in our apps we were receiving errors for this component.

Does this replace the old sintax "PreventUpdate"?

ndrezn commented 2 months ago

@leo-smi no, no relation to PreventUpdate.

leo-smi commented 2 months ago

@leo-smi no, no relation to PreventUpdate.

Thank you. Saw here that one is only for one output and other for all outputs...