Retraso en la actualización del contenido de la pestaña cuando se actualiza el control de la barra lateral.
En la aplicación Shiny a continuación, estoy actualizando el contenido de tabPanel
cuando cambia la selección en sidebarMenu
. Sin embargo, hay un pequeño retraso en la actualización del contenido de tabPanel
cuando cambio la selección en sidebarMenu
.
Para el pequeño número de valores de entrada, este retraso es insignificante, pero cuando tengo un control selectizeInput
en sidebarMenu
y cargo 1000 valores allí, entonces la actualización del contenido en tabPanel
es considerable. ¿Hay alguna forma de actualizar el contenido de tabPanel
instantáneamente? ¿Algo así como “el contenido en todas las pestañas se actualiza tan pronto como alguien realiza una selección en sidebarMenu
, incluso antes de que alguien haga clic en la pestaña”?
library(shiny)
library(shinydashboard)
sidebar <- dashboardSidebar(
sidebarMenu(
# Agregar botones para elegir la forma en que desea seleccionar sus datos
radioButtons("select_by", "Seleccionar por:",
c("Tipo de comida" = "Food",
"Tipo de gimnasio" = "Gym",
"Programa de televisión" = "TV"))
)
)
body <- dashboardBody(
fluidRow(
tabBox(
side = "right",
selected = "Tab3",
tabPanel("Tab1", "Contenido de la pestaña 1", textOutput("tabset1Selected")),
tabPanel("Tab2", "Contenido de la pestaña 2", textOutput("tabset2Selected")),
tabPanel("Tab3", "Contenido de la pestaña 3", textOutput("tabset3Selected"))
)
)
)
shinyApp(
ui = dashboardPage(
dashboardHeader(title = "tabBoxes"),
sidebar,
body
),
server = function(input, output) {
# La pestaña actualmente seleccionada de la primera caja
output$tabset1Selected <- output$tabset2Selected <- output$tabset3Selected <- renderText({
input$select_by
})
}
)
davy.ai
Para actualizar el contenido de todas las pestañas en
tabBox
inmediatamente cuando cambia la selección ensidebarMenu
, podemos agregar un observador que se activa cuando se cambia el control de entrada. Dentro del observador, podemos utilizar la funciónupdateTabsetPanel
para actualizar el contenido detabBox
inmediatamente. Aquí está el código modificado que logra esto:Ten en cuenta que necesitamos agregar un id al
tabBox
y usar ese id en la funciónupdateTabsetPanel
. Además, necesitamos usar el objetosession
dentro del observador para asegurarnos de que la actualización se realice inmediatamente.