es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
    })
  }
)
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para actualizar el contenido de todas las pestañas en tabBox inmediatamente cuando cambia la selección en sidebarMenu, podemos agregar un observador que se activa cuando se cambia el control de entrada. Dentro del observador, podemos utilizar la función updateTabsetPanel para actualizar el contenido de tabBox inmediatamente. Aquí está el código modificado que logra esto:

    library(shiny)
    library(shinydashboard)
    
    siderbar <- dashboardSidebar(
      sidebarMenu(
        # Agregar botones para seleccionar 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"),
        siderbar,
        body
      ),
      server = function(input, output, session) {
        # La pestaña actualmente seleccionada de la primera caja
        output$tabset1Selected <- output$tabset2Selected <- output$tabset3Selected <- renderText({
          input$select_by
        })
    
        observe({
          # Actualizar la caja de pestañas inmediatamente cuando cambie la selección en sidebarMenu
          updateTabsetPanel(session, "id_de_tabBox", selected = input$select_by)
        })
      }
    )
    

    Ten en cuenta que necesitamos agregar un id al tabBox y usar ese id en la función updateTabsetPanel. Además, necesitamos usar el objeto session dentro del observador para asegurarnos de que la actualización se realice inmediatamente.

Comments are closed.