Wyzwalanie reakcji za pomocą observeEvent()
Czasem chcesz wykonać jakąś akcję w odpowiedzi na określone zdarzenie. Na przykład możesz umożliwić użytkownikowi pobranie tabeli jako pliku CSV po kliknięciu przycisku „Pobierz". Możesz też wyświetlić powiadomienie lub okno modalne w reakcji na kliknięcie.
Funkcja observeEvent() pozwala to osiągnąć. Przyjmuje dwa argumenty:
- Zdarzenie, na które chcesz reagować.
- Funkcję, która ma być wywołana za każdym razem, gdy to zdarzenie nastąpi.
W tym ćwiczeniu użyjesz observeEvent(), aby wyświetlić okno modalne z tekstem pomocy, gdy użytkownik kliknie przycisk „Help". Tekst pomocy
jest już przypisany do zmiennej bmi_help_text.
To ćwiczenie jest częścią kursu
Tworzenie aplikacji internetowych z Shiny w R
Instrukcje do ćwiczenia
- UI:
- Dodaj przycisk akcji o nazwie 'show_help' z etykietą „Help". Być może trzeba będzie przewinąć stronę w dół lub zwinąć konsolę, aby zobaczyć UI.
- Server:
- Usuń komentarz z kodu
# showModal ... - Owiń
showModal(...)funkcjąobserveEvent()tak, aby tekst pomocy był wyświetlany po kliknięciu przycisku pomocy przez użytkownika
- Usuń komentarz z kodu
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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)