【问题标题】:Shiny - observeEvent appears without clickShiny - observeEvent 无需点击即可出现
【发布时间】:2018-06-29 08:42:33
【问题描述】:

我想开发一个有两个按钮的应用程序: 1.计算 2.刷新

当我单击“计算”按钮时,会出现第二个按钮。当我点击第二个按钮时,会出现一个句子:“Le resultat est...”。按钮刷新清理网页。现在页面很干净,只出现了两个初始按钮:计算和刷新。

如果我再次单击“计算”按钮,则会出现“Le resultat est...”句子,而无需单击第二个按钮。

问题:如何才能在点击第二个按钮后才能获得句子“Le resultat est...”?

在我的代码下面:

library(shiny)
data_Modele <- deval_Shiny

ui <- fluidPage(
  actionButton("runif", "Uniform"),
  actionButton("reset", "Clear"),
  uiOutput("plot")
)

server <- function(input, output){

  v <- reactiveValues(data = NULL)

  observeEvent(input$runif, {
    v$data <- round(runif(1, min=1, max=nrow(deval_Shiny)),digits = 0)

    output$Button<- renderUI({
    actionButton("button", "click me")
  })
  })

  observeEvent(input$reset, {
    v$data <- NULL
  }) 

  observeEvent(input$button, {
  output$Reponse <- renderText(paste0("Le resultat est :",v$data))
  })


  output$plot <- renderUI({
    if (is.null(v$data)) return()

    tagList(
     uiOutput("Button"),
     uiOutput("Reponse")
    )
  })
}

shinyApp(ui, server)

提前感谢您的帮助:)

J.

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    如果您希望您的 uiOutputs 单独运行,我建议不要在 output$plot 内将它们绑定在一起。所以如果你不需要他们在一起,我会添加一个变量show_response来控制你是否要显示响应。

    library(shiny)
    
    ui <- fluidPage(
      actionButton("runif", "Uniform"),
      actionButton("reset", "Clear"),
      uiOutput("Button"),
      uiOutput("Reponse")
    )
    
    server <- function(input, output){
    
      v <- reactiveValues(data = NULL)
      show_response <- reactiveValues(state = FALSE)
    
      observeEvent(input$runif, {
        v$data <- round(runif(1, min = 1, max = 100), digits = 0)
      })
    
      observeEvent(input$reset, {
        v$data <- NULL
        show_response$state <- FALSE
      }) 
    
      observeEvent(input$button, {
        show_response$state <- TRUE
      })
    
      output$Button <- renderUI({
        req(v$data) 
        actionButton("button", "click me")
      })
    
      output$Reponse <- renderText({
        req(show_response$state)
        paste0("Le resultat est :", v$data)
      })
    
    }
    
    shinyApp(ui, server)
    

    【讨论】:

    • 非常感谢
    【解决方案2】:

    您可以使用shinyjs 及其showhide 函数:

    library(shiny)
    library(shinyjs)
    
    deval_Shiny <- mtcars
    data_Modele <- deval_Shiny
    
    ui <- fluidPage(
      useShinyjs(),
      actionButton("runif", "Uniform"),
      actionButton("reset", "Clear"),br(),
      actionButton("button", "click me"),
      textOutput("Reponse")
    )
    
    server <- function(input, output){
    
      observe({
        hide("button")
        hide("Reponse")
      })
    
      v <- reactiveValues(data = NULL)
    
      observeEvent(input$runif,{
        show("button")
        v$data <- round(runif(1, min=1, max=nrow(deval_Shiny)),digits = 0)
      })
    
      observeEvent(input$reset, {
        hide("button")
        hide("Reponse")
      }) 
    
      output$Reponse <- renderText(paste0("Le resultat est :",v$data))
    
      observeEvent(input$button, {
        show("Reponse")
      })
    }
    
    shinyApp(ui, server)
    

    【讨论】:

      猜你喜欢
      • 2016-04-15
      • 1970-01-01
      • 2020-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 2017-11-06
      相关资源
      最近更新 更多