Skip to content

Chapter 18.3 Suggestion for additional note to explain concept #629

@jhk0530

Description

@jhk0530

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 session to 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions