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:
- O evento ao qual você quer responder.
- 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
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(...)emobserveEvent()para que o texto de ajuda seja exibido quando o usuário clicar no botão de ajuda
- Remova o comentário do código
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)