Created
May 2, 2019 12:03
-
-
Save johndrummond/0bbc846da698e0b7e84bff9d2871ae0b to your computer and use it in GitHub Desktop.
compare observeEvent to observe plus isolate in a shiny app
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# oberveEvent includes the ability of the first parameter to be an expression. But if the return value of that expression is | |
# null, the ignore null setting blocks updates, even though other parts of the expression are updating. | |
# in the example below with the default settings, button Event1 will only trigger the update of "observeEvent either button" | |
# after Event2 has been pushed at least once | |
library(shiny) | |
# Define UI for application that draws a histogram | |
ui <- fluidPage( | |
# Application title | |
titlePanel("Observers"), | |
actionButton("event1", "Event 1"), | |
actionButton("event2", "Event 2"), | |
p("reactiveout",verbatimTextOutput("reactiveout", placeholder = TRUE)), | |
p("setWithinReactive",verbatimTextOutput("setWithinReactive", placeholder = TRUE)), | |
p("observeEvent either button",verbatimTextOutput("observeEventOut", placeholder = TRUE)), | |
p("observe either button",verbatimTextOutput("observeOut", placeholder = TRUE)), | |
p("buttonClicked observeEvent",verbatimTextOutput("buttonClicked", placeholder = TRUE)) | |
) | |
# Define server logic required to draw a histogram | |
server <- function(input, output) { | |
observeEvent(input$event1, | |
{ | |
resultstr <- paste("button 1", input$event1, input$event2) | |
output$buttonClicked <- renderText({resultstr}) | |
}) | |
observeEvent(input$event2, | |
{ | |
resultstr <- paste("button 2", input$event1, input$event2) | |
output$buttonClicked <- renderText({resultstr}) | |
}) | |
observeEvent({ | |
input$event1 | |
input$event2 | |
}, | |
{ | |
resultstr <- paste("button 1 or 2", input$event1, input$event2) | |
output$observeEventOut <- renderText({resultstr}) | |
}) | |
observe({ | |
input$event1 | |
input$event2 | |
isolate({ | |
resultstr <- paste("observe 1 or 2", input$event1, input$event2) | |
output$observeOut <- renderText({resultstr}) | |
})}) | |
fromreactive <- reactive({ | |
resultstr <- paste("button 1 or 2", input$event1, input$event2) | |
output$setWithinReactive <- renderText({fromreactive()}) | |
resultstr | |
}) | |
output$reactiveout <- renderText({fromreactive()}) | |
} | |
# Run the application | |
shinyApp(ui = ui, server = server) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment