-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Patch callbacks #2414
Add Patch callbacks #2414
Conversation
Co-authored-by: Alex Johnson <johnson.alex.c@gmail.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Beautiful. Can't wait to get this into peoples' hands! 💃
Good afternoon. Thanks for allow_duplicate, it's a very nice addition. If you specify several ouputs(with and without allow_duplicate), then even though there will be an error, the value will be updated for ouput without allow_duplicate, but not for output with allow_duplicate, example: Tell me, am I doing something wrong? Thank you very much. Full code sample (with one callback, but I think this is enough to show the error): import dash
from dash import Dash, html, Input, Output
app = Dash(__name__)
app.layout = html.Div(
children=[
html.Div(
children=['Last pressed button: ', html.Span(id='span', children='empty')]
),
html.Button(
id='button-right',
children='right'
)
]
)
# NOT WORKING FOR "SPAN", BUT WARKING FOR BUTTON-RIGHT
dash.clientside_callback(
"""
function(n_clicks){
return ["right", `right ${n_clicks}`];
}
""",
[
Output('span', 'children', allow_duplicate=True),
Output('button-right', 'children')
],
Input('button-right', 'n_clicks'),
prevent_initial_call=True
)
# WORKING EXAMPLE TO UNDERSTAND HOW IT SHOULD BE (THE ONLY DIFFERENCE IS THAT NO ALLOW_DUPLICATE)
# dash.clientside_callback(
# """
# function(n_clicks){
# return ["right", `right ${n_clicks}`];
# }
# """,
# [
# Output('span', 'children'),
# Output('button-right', 'children')
# ],
# Input('button-right', 'n_clicks'),
# prevent_initial_call=True
# )
if __name__ == '__main__':
app.run_server(debug=True, port=2414) |
Add
dash.Patch
: return a Patch instance to do a partial update of the target prop without transferring the previous in aState
. This object is like a proxy of the value on the frontend, you instantiate a patch and return it in callback:p = Patch()
. You can set the subprop with attribute access or number index for array and keys which may not be a valid Python variable name:p.attribute = "attr"
is same asp["attribute"] = "attr"
. Available operations:p.assigned = "Assigned"
;allow_duplicate
argument toOutput
to allow multiple callbacks to target the sameOutput
.Example