简体   繁体   中英

multiple users changing reactive values in R shiny

Is it possible for multiple users of the same app to make changes to the same set of reactive values?

This question ( handling multiple users simulaneously in an R Shiny app ) suggests that multiple users in different sessions can make changes to the same value (by declaring it outside of server() and using <<- instead of <- ) But that is for just plain old values/variables. Is this possible for reactive values?

Ideally, I would like a change made by user A to be immediately reflected in some output viewed by user B.

Here's a minimal working example based on RStudio's default one-file Shiny app:

library(shiny)

slidervalue <- 30

# Define UI for application that draws a histogram
ui <- fluidPage(

    # Application title
    titlePanel("Old Faithful Geyser Data"),

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
        sidebarPanel(
            sliderInput("bins",
                        "Number of bins:",
                        min = 1,
                        max = 50,
                        value = slidervalue)
        ),

        # Show a plot of the generated distribution
        mainPanel(
           plotOutput("distPlot"),
           textOutput('txt')
        )
    )
)

# Define server logic required to draw a histogram
server <- function(input, output, session) {

    observe({
        slidervalue <<- input$bins
    })

    reactive_slidervalue <- reactivePoll(100, session, 
        checkFunc = function() { slidervalue },
        valueFunc = function() { slidervalue }
    )

    output$txt <- renderText(reactive_slidervalue())

    observe({
        updateSliderInput(session, 'bins', value = reactive_slidervalue())
    })

    output$distPlot <- renderPlot({
        # generate bins based on input$bins from ui.R
        x    <- faithful[, 2]
        bins <- seq(min(x), max(x), length.out = reactive_slidervalue() + 1)

        # draw the histogram with the specified number of bins
        hist(x, breaks = bins, col = 'darkgray', border = 'white')
    })
}

# Run the application 
shinyApp(ui = ui, server = server)

Basically, I am using a global variable (as you and and the post suggested), and then hooked it back into server by using the reactivePoll function to make the external dependency reactive.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM