I’m trying to make a function that takes the children of a row and a figure in storage, appends that figure to the children, and returns the appended children.
Right now I have this callback function:
@app.callback( Output('row-container', 'children'), [Input('append-button', 'n_clicks'), Input('fig-store', 'data')], [State('row-container', 'children')] ) def update_row(n_clicks, stored_fig, current_figs): """ Duplicates the contents of a row and appends that to itself Parameters ------------- n_clicks : Int, None The number of times the button is pressed stored_fig : go.Figure, None The first figure in the row (in local storage) current_figs : List, None The children of the row that is currently displayed on the page Returns --------- new_children : List current_figs with stored_fig appended to it """ # If the figures are currently on the screen: if current_figs: new_children = current_figs else: new_children =  # If the button was pressed and the stored figure exists if n_clicks and stored_fig: new_children.append(stored_fig) elif stored_fig: # The stored_fig changed new_children = [stored_fig] return new_children
This works just fine the first time I press that
append-button and it appends the
stored_fig to the children. However, the second time I press the button I get this error:
From looking deeper with ipdb, it looks like
new_children is properly updated and returned but somewhere deep in Dash a bad response is thrown. Here’s what Chrome’s console has to say about it:
Uncaught Error: must provide button 'click' function in button config at l.c.createButton (plotly-1.49.4.min.js:7) at plotly-1.49.4.min.js:7 at Array.forEach (<anonymous>) at plotly-1.49.4.min.js:7 at Array.forEach (<anonymous>) at l.c.updateButtons (plotly-1.49.4.min.js:7) at l.c.update (plotly-1.49.4.min.js:7) at new l (plotly-1.49.4.min.js:7) at e.exports (plotly-1.49.4.min.js:7) at Object.e.exports [as manage] (plotly-1.49.4.min.js:7)
l.c.createButton line is:
Do y’all know what’s going on here? I’m not sure why the
click function isn’t defined for a button, why the button works the first time, or why
createButton is even being called.