Dispara reacciones con observeEvent()
Hay momentos en los que quieres realizar una acción en respuesta a un evento. Por ejemplo, quizá quieras permitir que la persona usuaria de la app descargue una tabla como archivo CSV cuando haga clic en un botón "Download". O quizá quieras mostrar una notificación o un cuadro modal en respuesta a un clic.
La función observeEvent() te permite hacerlo. Acepta dos argumentos:
- El evento al que quieres responder.
- La función que debe llamarse cada vez que ocurra el evento.
En este ejercicio, usarás observeEvent() para mostrar un cuadro modal con texto de ayuda cuando la persona usuaria haga clic en un botón etiquetado como "Help". El texto de ayuda ya se ha asignado a la variable bmi_help_text.
Este ejercicio forma parte del curso
Creación de aplicaciones web con Shiny en R
Instrucciones del ejercicio
- UI:
- Añade un botón de acción llamado 'show_help', con la etiqueta "Help". Puede que tengas que desplazarte hacia abajo o contraer la consola para ver la interfaz.
- Server:
- Descomenta el código
# showModal ... - Envuelve
showModal(...)enobserveEvent()para que el texto de ayuda se muestre cuando la persona usuaria haga clic en el botón de ayuda
- Descomenta el código
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
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)