【问题标题】:Save state of input shiny保存输入闪亮状态
【发布时间】:2017-03-15 14:22:41
【问题描述】:

有没有很好的方法来保存在服务器端生成的闪亮输入的状态(不要重置)?

例子

ui=shinyUI(fluidPage(
  selectInput("select","",choices = c(1,2),multiple = T),
  uiOutput("din_ui")
  ))

server=function(input, output,session) {
  output$din_ui=renderUI({
    lapply(input$select,function(i){
      numericInput(inputId = paste0("num_",i),i,"")
    })
  })

}

shinyApp(ui,server)

如果我在 select 中选择 1,则在 num_1 中插入一些值,而不是在 select 中添加 2,而不是 num_1 重置为起始值。

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    您可以读取 numericInput 值,并在控件初始化时设置控件值。见代码:

    library(shiny)
    
    ui=shinyUI(fluidPage(
      selectInput("select","",choices = c(1,2),multiple = T),
      uiOutput("din_ui")
    )) 
    
    server=function(input, output,session) {
      output$din_ui=renderUI({
    
        input$select 
    
        isolate(
          lapply(X   = input$select, 
                 FUN = function(i){ 
                   cn <- paste0("num_",i)
                   numericInput(inputId = cn,
                                label   = i,
                                value   = ifelse(!is.null(input[[cn]]), input[[cn]], ''))
                 }
          )
        )
      })
    
    }
    
    shinyApp(ui,server)
    

    【讨论】:

    • 好变种,我也找到其他方法(不知道哪个更好)(有时我很难理解隔离...)
    【解决方案2】:

    还可以使用insertUI(闪亮版本> = 14)找到其他方式

    ui=shinyUI(fluidPage(
      selectInput("select","",choices = c(1,2),multiple = T),
      div(id="din_2")
    )) 
    
    server=function(input, output,session) {
      sel_dat=reactiveValues(sel=NULL)
    
      observeEvent(input$select,{
        to_add=input$select[!input$select%in%sel_dat$sel]
        for ( i in to_add){
               insertUI(
                selector = '#din_2',
                where = "beforeEnd",
                ui =numericInput(inputId = paste0("num_",i),i,"")
              )
        }
        to_remove=sel_dat$sel[which(!sel_dat$sel %in% input$select)]
        if(length(to_remove)>0){
          removeUI(selector = paste0('div:has(>#num_',to_remove,")"))
        }
        sel_dat$sel=input$select
      },ignoreNULL = FALSE)
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 2014-10-08
      • 2020-05-22
      • 2017-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多