Declanșează reacții cu observeEvent()
Uneori vrei să execuți o acțiune ca răspuns la un eveniment. De exemplu, poate vrei să permiți utilizatorului să descarce un tabel ca fișier CSV atunci când apasă un buton „Descarcă". Sau vrei să afișezi o notificare sau un dialog modal ca răspuns la un clic.
Funcția observeEvent() îți permite să faci exact asta. Acceptă două argumente:
- Evenimentul la care vrei să reacționezi.
- Funcția care trebuie apelată ori de câte ori apare evenimentul.
În acest exercițiu, vei folosi observeEvent() pentru a afișa un dialog modal cu text de ajutor, atunci când utilizatorul apasă pe un buton etichetat „Help". Textul de ajutor a fost deja atribuit variabilei bmi_help_text.
Acest exercițiu face parte din cursul
Crearea aplicațiilor web cu Shiny în R
Instrucțiuni pentru exercițiu
- UI:
- Adaugă un buton de acțiune numit 'show_help', cu eticheta "Help". Este posibil să fie nevoie să derulezi în jos sau să restrângi consola pentru a vedea UI-ul.
- Server:
- Decomentează codul
# showModal ... - Îngloba
showModal(...)înobserveEvent()astfel încât textul de ajutor să fie afișat când utilizatorul apasă pe butonul de ajutor
- Decomentează codul
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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)