【问题标题】:Reset conditionalPanel fileInputs with rshiny and shinyjs()使用 rshiny 和 shinyjs() 重置 conditionalPanel 文件输入
【发布时间】:2021-12-23 13:53:38
【问题描述】:

在我的应用程序中,用户可以选择多个会话,这决定了用户可以上传文件的可用文件小部件的数量。

我希望发生的是,当用户更改会话数时 - 例如从 2 到 3,条件面板中的 fileInputs 会重置,为用户再次上传文件做好准备。我一直在尝试结合使用 shinyjs::reset() 和 observe() 来完成此操作,但它似乎不起作用,即如果用户从 2 个会话切换到 3 个会话,文件仍然存在。

下面的基本示例:

library(shiny)
library(shinyjs)

ui <- fluidPage(useShinyjs(),
                
                sidebarLayout(sidebarPanel(
                  selectInput(
                    inputId = "numSessions",
                    label = "Number of sessions",
                    choices = c("2 Sessions" = 2,
                                "3 Sessions" = 3)
                  ),
                  
                  div(
                    id = "conditional-inputs",
                    conditionalPanel(
                      "input.numSessions == 2",
                      fileInput("s1file", "Session 1"),
                      fileInput("s2file", "Session 2")
                    ),
                    
                    conditionalPanel(
                      "input.numSessions == 3",
                      fileInput("s1file", "Session 1"),
                      fileInput("s2file", "Session 2"),
                      fileInput("s3file", "Session 3")
                    )
                  )
                ),
                
              
                mainPanel()))


server <- function(input, output) {
  observe({
    if (input$numSessions == 2) {
      reset("conditional-inputs")
    } else if (input$numSessions == 3) {
      reset("conditional-inputs")
    }
  })
}


shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r shiny shinyjs


    【解决方案1】:

    这个怎么样:

    library(shiny)
    
    ui <- fluidPage(
        sidebarLayout(sidebarPanel(
            selectInput(
                inputId = "numSessions",
                label = "Number of sessions",
                choices = c("2 Sessions" = 2,
                            "3 Sessions" = 3)
            ),
            uiOutput("conditional-inputs")
        ),
        mainPanel()
        )
    )
    
    server <- function(input, output) {
        output$`conditional-inputs` <- renderUI({
            ui <- tagList(
                fileInput("s1file", "Session 1"),
                fileInput("s2file", "Session 2")
            )
            if(input$numSessions == 3) ui <- tagList(ui, fileInput("s3file", "Session 3"))
            ui
        })
    }
    
    shinyApp(ui = ui, server = server)
    
    

    我们使用renderUI 来刷新它。无需使用 shinyjs 或条件面板。 干净简洁的代码

    【讨论】:

      猜你喜欢
      • 2021-08-02
      • 2020-03-14
      • 2019-08-09
      • 2017-05-18
      • 2017-10-07
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 2017-03-03
      相关资源
      最近更新 更多