闪亮-无需单击即可出现observeEvent

时间:2018-06-29 08:42:34

标签: r shiny

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

2 个答案:

答案 0 :(得分:0)

如果您希望自己的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)

答案 1 :(得分:0)

您可以使用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)

enter image description here