-
Notifications
You must be signed in to change notification settings - Fork 572
Description
In internal functions.
There's example code with separate shiny internal function.
before
server <- function(input, output, session) {
switch_page <- function(i) {
updateTabsetPanel(input = "wizard", selected = paste0("page_", i))
}
observeEvent(input$page_12, switch_page(2))
observeEvent(input$page_21, switch_page(1))
observeEvent(input$page_23, switch_page(3))
observeEvent(input$page_32, switch_page(2))
}after
switch_page <- function(i) {
updateTabsetPanel(input = "wizard", selected = paste0("page_", i))
}
server <- function(input, output, session) {
observeEvent(input$page_12, switch_page(2))
observeEvent(input$page_21, switch_page(1))
observeEvent(input$page_23, switch_page(3))
observeEvent(input$page_32, switch_page(2))
}Changed: switch_page function "moved out" of server function.
And there's explanation like below
"We could of course add
sessionto the arguments of the function:"
However, the code is not much different as explained. (session is not mentioned in code)
Since shiny's updated version (updateTabesetPanel()) use session with getDefaultReactiveDomain() as default parameter.
So I suggest to mention like below and why session parameter didn't used to avoid confusion.
We could of course add session to the arguments of the function:
switch_page <- function(session, i){
updateTabsetPanel(session, input = "wizard", selected = paste0("page_", i))
}
server <- function(input, output, session) {
observeEvent(input$page_12, switch_page(session, 2))
observeEvent(input$page_21, switch_page(session, 1))
observeEvent(input$page_23, switch_page(session, 3))
observeEvent(input$page_32, switch_page(session, 2))
}However, since shiny > 1.6 uses update- function (like updateTabsetPanel) uses session as default pameter,
we can skip the session like below
switch_page <- function(i) {
updateTabsetPanel(input = "wizard", selected = paste0("page_", i))
}
server <- function(input, output, session) {
observeEvent(input$page_12, switch_page(2))
observeEvent(input$page_21, switch_page(1))
observeEvent(input$page_23, switch_page(3))
observeEvent(input$page_32, switch_page(2))
}But this feels weird as the function is still fundamentally coupled to this app because it only affects a control named “wizard” with a very specific set of tabs.
Thanks.