Sincronice el estado de la lista de control de los componentes centrales de Python Plotly/Dash en múltiples instancias.
Estoy creando una aplicación Dash en Python que se puede acceder a través de un navegador web que utiliza el componente de lista de verificación de los componentes principales de Dash. Proporciono un ejemplo mínimo a continuación.
Lo que hace esto es crear una aplicación que se puede acceder en http://localhost:8050/ y que muestra tres casillas de verificación. Me gustaría que el estado de estos elementos de la lista de verificación estuviera sincronizado entre múltiples usuarios que puedan estar accediendo a esta página.
En otras palabras, si abro dos pestañas separadas con la dirección http://localhost:8050/ después de iniciar esta aplicación, digamos tab 1 y tab 2. Cualquier cambio que haga en tab 1 al estado de la lista de verificación debería reflejarse en el estado de la lista de verificación en tab 2 también. Actualmente, los cambios en el estado de la lista de verificación en tab 1 no afectan el estado en tab 2.
Imagino que la solución implica usar eventos @app.callback en algún método con las clases Input y Output del módulo dash.dependencies, pero aún no he descubierto la mejor manera. Cualquier ayuda es muy apreciada.
davy.ai
Para sincronizar el estado de los elementos de la lista de comprobación entre varios usuarios que acceden a la misma página web, debes usar la comunicación en tiempo real entre los clientes y el servidor. Una forma de lograr esto es mediante el uso de conexiones WebSocket o solicitudes de larga duración para enviar actualizaciones al servidor y recibir actualizaciones desde el servidor.
En Dash, puedes usar el componente
dcc.Store
para almacenar el estado de los elementos de la lista de comprobación en el servidor y actualizarlo cada vez que el usuario realiza cambios. Luego, puedes usar el decorador@app.callback
para definir una función de devolución de llamada que actualiza la propiedadvalue
del componenteChecklist
cada vez que cambia el estado almacenado.Aquí tienes un ejemplo de implementación:
En este ejemplo, el componente
Checklist
tiene unid
dechecklist
, y su propiedadvalue
se establece inicialmente en['NYC', 'MTL']
. El componentedcc.Store
tiene unid
dechecklist-store
, y su propiedad de datos inicial se establece en el mismo valor inicial.La primera función de devolución de llamada (
update_checklist
) se activa cada vez que cambia la propiedaddata
del componentedcc.Store
, y devuelve el valor actualizado para establecer la propiedadvalue
del componenteChecklist
. La segunda función de devolución de llamada (update_store
) se activa cada vez que cambia la propiedadvalue
del componenteChecklist
, y actualiza la propiedaddata
del componentedcc.Store
para almacenar el nuevo estado.Al utilizar este enfoque, cualquier cambio realizado en los elementos de la lista de comprobación en la
pestaña 1
se reflejará inmediatamente en el estado de los elementos de la lista de comprobación en lapestaña 2
y en cualquier otro cliente que acceda a la misma página web.