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.

Renderizar dashboardSidebar dinámicamente solo cuando el usuario hace clic en tabPanel.

Estoy tratando de renderizar el dashboardSidebar dinámicamente al hacer clic en tabPanel, para que los controles en todas las pestañas no se carguen al inicializar la aplicación. Para eso he creado una función load_tab2 pero esta función no está mostrando nada al hacer clic en la pestaña. ¿Alguien puede señalar el problema con el código a continuación?

library(shiny)
library(shinydashboard)

sidebar <- dashboardSidebar(
  collapsed = FALSE,
  sidebarMenu(
    id = "menu_sidebar",
    conditionalPanel(
      condition = "input.main_tab == 'tab_1'",
      selectizeInput(inputId = "t1", label = "Select by:", choices = c(as.character(30:40))),
      div("Hello Tab 1")
    ))
)

body <- dashboardBody(
  fluidRow(
    tabsetPanel(
      id = "main_tab",
      selected = "tab_1",
      tabPanel(title = "tab_1", "Tab content 1"),
      tabPanel(title = "tab_2", "Tab content 2")
    )
  )
)

load_tab2 <- function(input, output, session){
  observeEvent(input$main_tab == 'tab_2', {
    insertUI(
      selector = "#menu_sidebar",
      where = "afterEnd",
      ui = conditionalPanel(
        condition = "input.main_tab == 'tab_2'",
        selectizeInput(inputId = "t2", label = "Select by:", choices = c(as.character(40:50))),
        div("Hello Tab 2")
      ),
      immediate = TRUE,
      session = getDefaultReactiveDomain()
    )
  }, ignoreInit = TRUE, once = TRUE)
}

shinyApp(
  ui = dashboardPage(
    dashboardHeader(title = "tabBoxes"),
    sidebar,
    body
  ),
  server = function(input, output, session) {
    callModule(load_tab2, "load_tab2_id")
  }
)
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que la función load_tab2 no está siendo llamada en ninguna parte de la aplicación. Has definido la función, pero necesitas llamarla en la función del servidor para que funcione. Para hacer esto, puedes añadir load_tab2(input, output, session) dentro de la función del servidor, después de la línea callModule.

    Además, es importante tener en cuenta que la función getDefaultReactiveDomain() ya no está disponible en versiones más recientes de Shiny, y se recomienda utilizar getDefaultReactiveDomain(session) en su lugar.

Comments are closed.