我做了类似的事情来在页面重新加载后填充我的布局组件。
感谢第一个回调,组件的状态存储在 dcc.Store 组件中。
第二个回调是在布局组件的状态发生变化或访问选项卡时填充布局组件(布局在 dcc.Tabs 中)
dash_layout_components = {
'time_slider_app2': 'value',
'backtest_choice_app2': 'values',
'asset_selection_app2': 'value',
'graph_selection_app2': 'values'
}
stored_layout_value_name = [key[:key.rfind('a')] + value for key, value in
dash_layout_components.items()]
set_back_and_display_graph_input = {
'store_layout_data': 'modified_timestamp',
'tabs': 'value'
}
@app.callback(
Output('store_layout_data', 'data'),
[Input(key, value) for key, value in dash_layout_components.items()])
def store_layout(time_slider_value, backtest_choice_values, assets_selection_values, graph_selection_values):
data_json = {
'time_slider_value': time_slider_value,
'backtest_choice_values': backtest_choice_values,
'asset_selection_value': assets_selection_values,
'graph_selection_values': graph_selection_values
}
return data_json
for component_id, component_property in dash_layout_components.items():
@app.callback(
Output(component_id, component_property),
[Input(key, value) for key, value in set_back_and_display_graph_input.items()],
[State('store_layout_data', 'data'),
State(component_id, 'id')]
)
def set_back_component(bouton_ts, tabs_value, layout_state_data, component): # dynamiser l'arrivée des paramètres. piste, en créer une liste entre le for et le callback
if tabs_value != '/app2':
raise PreventUpdate
if layout_state_data is None:
return []
else:
store_layout_component_name = stored_layout_value_name[list(dash_layout_components.keys()).index(component)]
return layout_state_data[store_layout_component_name]
请注意,您将无法访问函数 ( set_back_component(...) ) 内的迭代值(component_id 和 component_property)