ComeçarComece de graça

Dispare reações com observeEvent()

Há momentos em que você quer executar uma ação em resposta a um evento. Por exemplo, talvez você queira permitir que o usuário do app baixe uma tabela como um arquivo CSV quando clicar em um botão "Download". Ou você pode querer exibir uma notificação ou um diálogo modal em resposta a um clique.

A função observeEvent() permite fazer isso. Ela aceita dois argumentos:

  1. O evento ao qual você quer responder.
  2. A função que deve ser chamada sempre que o evento ocorrer.

Neste exercício, você vai usar observeEvent() para exibir um diálogo modal com um texto de ajuda quando o usuário clicar em um botão rotulado "Help". O texto de ajuda já foi atribuído à variável bmi_help_text.

Este exercício faz parte do curso

Construindo Aplicações Web com Shiny em R

Ver curso

Instruções do exercício

  • UI:
    • Adicione um botão de ação chamado 'show_help', com o rótulo "Help". Talvez você precise rolar a página para baixo ou recolher o console para ver a interface.
  • Server:
    • Remova o comentário do código # showModal ...
    • Envolva showModal(...) em observeEvent() para que o texto de ajuda seja exibido quando o usuário clicar no botão de ajuda

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

ui <- fluidPage(
  titlePanel('BMI Calculator'),
  sidebarLayout(
    sidebarPanel(
      textInput('name', 'Enter your name'),
      numericInput('height', 'Enter your height in meters', 1.5, 1, 2),
      numericInput('weight', 'Enter your weight in Kilograms', 60, 45, 120),
      actionButton("show_bmi", "Show BMI")
      # CODE BELOW: Add an action button named "show_help"
      
    ),
    mainPanel(
      textOutput("bmi")
    )
  )
)

server <- function(input, output, session) {
  # MODIFY CODE BELOW: Wrap in observeEvent() so the help text 
  # is displayed when a user clicks on the Help button.
  
     # Display a modal dialog with bmi_help_text
     # MODIFY CODE BELOW: Uncomment code
     # showModal(modalDialog(bmi_help_text))
  
  rv_bmi <- eventReactive(input$show_bmi, {
    input$weight/(input$height^2)
  })
  output$bmi <- renderText({
    bmi <- rv_bmi()
    paste("Hi", input$name, ". Your BMI is", round(bmi, 1))
  })
}

shinyApp(ui = ui, server = server)
Editar e executar o código