Memicu reaksi dengan observeEvent()
Ada kalanya Anda ingin melakukan suatu tindakan sebagai respons terhadap sebuah peristiwa. Misalnya, Anda mungkin ingin memungkinkan pengguna aplikasi mengunduh sebuah tabel sebagai berkas CSV ketika mereka mengeklik tombol "Download". Atau, Anda mungkin ingin menampilkan notifikasi atau dialog modal sebagai respons terhadap sebuah klik.
Fungsi observeEvent() memungkinkan Anda melakukan hal tersebut. Fungsi ini menerima dua argumen:
- Peristiwa yang ingin Anda tanggapi.
- Fungsi yang harus dipanggil setiap kali peristiwa tersebut terjadi.
Dalam latihan ini, Anda akan menggunakan observeEvent() untuk menampilkan dialog modal dengan teks bantuan saat pengguna mengeklik tombol berlabel "Help". Teks bantuan tersebut telah
diisikan ke dalam variabel bmi_help_text.
Latihan ini adalah bagian dari kursus
Membangun Aplikasi Web dengan Shiny di R
Petunjuk latihan
- UI:
- Tambahkan action button bernama 'show_help', dengan label "Help". Anda mungkin perlu menggulir ke bawah atau mengecilkan konsol untuk melihat UI.
- Server:
- Hapus komentar pada kode
# showModal ... - Bungkus
showModal(...)dalamobserveEvent()sehingga teks bantuan ditampilkan ketika pengguna mengeklik tombol bantuan
- Hapus komentar pada kode
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
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)