R Shiny: Остановить Automati c Refre sh при добавлении нового selectInput - PullRequest
0 голосов
/ 03 апреля 2020

Я создаю приложение, подобное Google Maps, в котором пользователь выбирает источник и пункты назначения. Но в моем коде приложение автоматически обновляет входы, и я не смог найти способ изолировать каждый из входов по отдельности. У кого-нибудь есть идеи, как решить эту проблему?

rm(list=ls())
library(shiny)
#
ui <- fluidPage(titlePanel("Getting Iframe"), 
                sidebarLayout(
                  sidebarPanel(
                    fluidRow(
                      column(10, selectInput("Origin", label=h5("Origin"),choices=c(paste0("City_",seq_len(5)))))
                    ),
                    fluidRow(
                      actionButton("add_btn", "Add Destination"),
                      actionButton("rm_btn", "Remove Destination")
                    ),
                    uiOutput("dest_ui")
                  ),
                  mainPanel(fluidRow(
                    htmlOutput("frame")
                  )
                  )
                ))
#
server <- function(input, output) {
  #
  ## Counts how many destinations user wants
  counter <- reactiveValues(n = 0)
  observeEvent(input$add_btn, {counter$n <- counter$n + 1})
  observeEvent(input$rm_btn, {
    if (counter$n > 0) counter$n <- counter$n - 1
  })
  #
  ## Destination selection
  dest <- reactive({
    n <- counter$n
    if (n > 0) {
      isolate({
        lapply(seq_len(n), function(i) {
          selectInput(inputId = paste0("Destination", i),
                      label = paste0("Destination ", i),
                      choices=c(paste0("City_",seq_len(5))))
        })
      })
    }
  })
  output$dest_ui <- renderUI({ dest() })
}

shinyApp(ui, server)

Что я хотел бы сделать, это сохранить выбор, когда пользователь нажмет кнопку добавления пункта назначения.

...