Я не могу понять, как очистить локальное хранилище при использовании dcc.Store

Я возился с dcc.Store (https://dash.plot.ly/dash-core-components/store)

Есть атрибут clear_data, но я не могу понять, как заставить его работать. Я хочу добавить кнопку html, чтобы очистить локальный магазин.

Все, что я делаю, это увеличиваю переменную, сохраняю ее и считываю обратно ... пример, приведенный Dash, не дает никаких указаний, как очистить значения

import dash
import dash_html_components as html
import dash_core_components as dcc
from dash.dependencies import Output, Input, State
from dash.exceptions import PreventUpdate


app = dash.Dash(__name__)
app.config['suppress_callback_exceptions']=True

app.layout = html.Div([

    dcc.Store(id='buttonstore3', storage_type='local'),

    html.Div([
        html.Button('Local', id='my-button3')
    ]),

    html.Div([
        html.Button('Clear Local', id='my-button4')
    ]),


    html.Div([
        html.Table([
            html.Thead([
                html.Tr([
                    html.Th('Local clicks')
                ])
            ]),
            html.Tbody([
                html.Tr([
                    html.Td(0, id='local-clicks'),
                ])
            ])
        ])
    ])


])


####### Add to Local Store
@app.callback(Output('buttonstore3', 'data'),
                [Input('my-button3', 'n_clicks')],
                [State('buttonstore3', 'data')])
def on_click(n_clicks, data):
    if n_clicks  is None:
        raise PreventUpdate

    data = data or 0
    data = data + 1
    return data


@app.callback(Output('local-clicks', 'children'),
                [Input('buttonstore3', 'modified_timestamp')],
                [State('buttonstore3', 'data')])
def on_data(ts, data):
    if ts is None:
        raise PreventUpdate

    data = data or 0
    return data


if __name__ == '__main__':
    app.run_server(debug=True, threaded=True)
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
2 637
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В документах здесь сказано:

clear_data - Set to True to remove the data contained in data_key.

Таким образом, вы можете добавить следующий обратный вызов в свое приложение:

@app.callback(Output('buttonstore3', 'clear_data'),
            [Input('my-button4', 'n_clicks')])
def clear_click(n_click_clear):
    if n_click_clear is not None and n_click_clear > 0:
        return True
    return False

Вы также можете обновить свой обратный вызов on_click, чтобы он принимал входные данные от обеих кнопок и выводил их в опору data в зависимости от того, какая кнопка была нажата, например так:

####### Add to Local Store
@app.callback(Output('buttonstore3', 'data'),
                [Input('my-button3', 'n_clicks'),
                Input('my-button4', 'n_clicks')],
                [State('buttonstore3', 'data')])
def on_click(n_clicks_add, n_clicks_clear, data):
    if n_clicks_add is None:
        n_clicks_add = 0
    if n_clicks_clear is None:
        n_clicks_clear = 0
    if data is None:
        data = 0

    trigger = dash.callback_context.triggered[0]

    if trigger['prop_id'] == 'my-button3.n_clicks':
        data += 1
    elif trigger['prop_id'] == 'my-button4.n_clicks':
        data = 0
    else:
        raise ValueError('Unrecognized trigger: {}'.format(trigger['prop_id']))

    return data

Большое вам спасибо, @coralvanda, обе эти работы доставляют удовольствие. Я пытался захватить ввод обеих кнопок — информация об этом застряла в разделе часто задаваемых вопросов документации Dash. Хорошенький Эрик.

Stuart L 09.04.2019 06:42

Отличный ответ, иногда я что-то пропускаю, когда читаю документацию.

mLstudent33 04.12.2020 06:09

Другие вопросы по теме