R 如何在Shiny中隐藏条件面板?

R 如何在Shiny中隐藏条件面板?,r,shiny,shinyjs,R,Shiny,Shinyjs,如何在Shiny中隐藏条件面板?请参见以下示例: library(shiny) ui <- fluidPage( actionButton("eval","Evaluate"), numericInput("num_input", "If number is changed, cp must hide", value = 0), conditionalPanel( condition = "input.eval", "text")) server &

如何在Shiny中隐藏条件面板?请参见以下示例:

library(shiny)

ui <- fluidPage(
  actionButton("eval","Evaluate"),
  numericInput("num_input", "If number is changed, cp must hide", value = 0),
  conditionalPanel(
      condition = "input.eval",
      "text"))

server <- function(input, output, session) {
  observeEvent(input$num_input, {
    input$eval <- 0
  })}

shinyApp(ui, server)

但这也不起作用:应用程序会定期打开,单击“评估”按钮后会显示“条件面板”,但数字更改后不会发生任何变化。

我从来没有玩过多少
条件面板,因此不确定它是否有隐藏/显示的默认设置。以下内容可能会为您提供所需的输出

library(shiny)
library(shinyjs)

if(interactive()){
  shinyApp(
    ui <- fluidPage(
      shinyjs::useShinyjs(),
      actionButton("eval","Evaluate"),
      numericInput("num_input", "If number is changed, cp must hide", value = 0),
      shinyjs::hidden(
        div(
          id = "cp1",
          conditionalPanel(condition = "input.eval", 
                           textOutput("text1")))
        )
      ),

    server = function(input, output, session){
      output$text1 <- renderText({
        input$num_input
      })
      observeEvent(input$eval,{
        shinyjs::show("cp1")
      })
      observeEvent(input$num_input,{
        shinyjs::hide("cp1")
      })
    }
  )
}
库(闪亮)
图书馆(shinyjs)
if(interactive()){
shinyApp(

ui您可以创建一个输出值,并将其仅用于条件面板。关于dynamic ui的文章解释了如何做到这一点:

条件还可以使用输出值;它们的工作方式相同(output.foo提供输出foo的值)。如果您希望使用R表达式作为条件参数,则可以在服务器函数中创建反应式表达式并将其分配给新输出,然后在条件表达式中引用该输出

如果执行此操作,请确保还设置了outputOptions(output,[newOutputName],suspendWhenHidden=FALSE)。(这是必要的,因为Shining通常不会向浏览器发送UI中隐藏或不存在的输出值。但是,在这种情况下,浏览器确实需要知道最新的输出值,以便正确评估ConditionalPanel函数的条件-suspendWhenHidden=FALSE确保这一情况发生)

库(闪亮)
用户界面
library(shiny)
library(shinyjs)

if(interactive()){
  shinyApp(
    ui <- fluidPage(
      shinyjs::useShinyjs(),
      actionButton("eval","Evaluate"),
      numericInput("num_input", "If number is changed, cp must hide", value = 0),
      shinyjs::hidden(
        div(
          id = "cp1",
          conditionalPanel(condition = "input.eval", 
                           textOutput("text1")))
        )
      ),

    server = function(input, output, session){
      output$text1 <- renderText({
        input$num_input
      })
      observeEvent(input$eval,{
        shinyjs::show("cp1")
      })
      observeEvent(input$num_input,{
        shinyjs::hide("cp1")
      })
    }
  )
}
library(shiny)

ui <- fluidPage(
  actionButton("eval","Evaluate"),
  numericInput("num_input", "If number is changed, cp must hide", value = 0),
  conditionalPanel("input.eval && !output.hide_panel", "text")
)

server <- function(input, output, session) {

  output$hide_panel <- eventReactive(input$num_input, TRUE, ignoreInit = TRUE)

  outputOptions(output, "hide_panel", suspendWhenHidden = FALSE)
}

shinyApp(ui, server)