R shiny conditionalPanel output value

前端 未结 3 651
醉梦人生
醉梦人生 2020-12-09 19:26

There are many questions about conditionalPanel in R shiny, but I still don\'t understand how I can use values created by server.R for conditionalPanel

相关标签:
3条回答
  • 2020-12-09 19:58

    I think that the output must be rendered in the UI if you want to use it after in the condition of a conditionalPanel.

    With you example, the HTML for the conditional panel will look like something like this :

    <div data-display-if="output.disable_ui!=0">

    If no elements in your page (created as outputs in the server side) have the id "disable_ui" then the condition "output.disable_ui!=0" is always TRUE, and the conditional panel always displayed.

    A simple example :

    shiny::runApp(list( 
      ui = pageWithSidebar(
        
        headerPanel("test"),
        
        sidebarPanel(
          selectInput(
            "var", "Var",
            0:9)),
        
        mainPanel(
          verbatimTextOutput("id"),
          conditionalPanel(
            condition="output.id!=0",
            h4('Visible')
          )
        )
      ),
      server = function(input, output) {
        
        output$id<-reactive({input$var})
        
      }
    ))
    

    If you select a number different of 0 the conditional panel will be displayed. Now, comment the line verbatimTextOutput("id"),, there is no more element with the id "id" in the page and then the condition of the conditional panel <div data-display-if="output.id!=0"> can't be FALSE.

    0 讨论(0)
  • 2020-12-09 20:06

    This is the real answer to this question: Use this inside of your server function:

    outputOptions(output, "outputId", suspendWhenHidden = FALSE)
    

    You will then be able to use the output.item in your conditionalPanel.

    Answer from here: https://github.com/daattali/advanced-shiny/blob/master/server-to-ui-variable/app.R

    And here: https://github.com/rstudio/shiny/issues/1318

    0 讨论(0)
  • 2020-12-09 20:13

    @Julien Navarre is right: the output must be rendered. Except if you set its option suspendWhenHidden to FALSE:

      output$disable_ui<-reactive({
        query<-parseQueryString(clientData$url_search)
        url_path<-paste(sep="","http://some-url.com/php/session_check.php?sid=",query, collapse="")
        read.table(url_path)
      })
      outputOptions(output, 'disable_ui', suspendWhenHidden=FALSE)
    
    0 讨论(0)
提交回复
热议问题