首页 > 解决方案 > Shiny - observeEvent 无需点击即可出现

问题描述

我想开发一个有两个按钮的应用程序: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。

标签: rshiny

解决方案


如果你想让你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)

推荐阅读