R shiny – 在selectInput中保存选定的值

我有10个’编辑’动作按钮。 在每个“编辑”操作按钮上会出现三个selectInput。 点击selectInputs下方的“保存”按钮后,我想记住所选的值。 如果我转到第2行 – >单击“编辑” – >选择值 – >单击“保存”并返回第1行,它不记得先前在第1行中选择的值。

所以我想在“保存”按钮上有两个动作,即:

  • 存储给定’行’的选定值(所以当我再次点击相同的编辑按钮时,我将看到之前选择的值)
  • 单击“保存”按钮后,使所有selectInputs消失

    库(shiny)

    ui <- shinyUI(fluidPage( titlePanel("Update Select Inputs"), mainPanel( tags$head(tags$script(HTML("$(document).on('click', '.needed', function () { Shiny.onInputChange('last_btn',this.id); });"))), column(width = 6, uiOutput('ValuesAndButtons')), column(width = 6,uiOutput('Details')) ) ) ) server <- shinyServer(function(input, output) { output$ValuesAndButtons <- renderUI({ lapply( c(1:10), function(i){ fluidRow( column( width = 4, tags$span(i) ), column( width = 3, tags$button( type = "button", id = paste0('ActionButton', i), class="btn action-button needed", "Edit" ) ) ) } ) }) output$Details <- renderUI ({ req(input$last_btn) fluidRow( lapply( c(1:3), function(i){ fluidRow( fluidRow( column( width = 5, tags$span(i) ), column( width = 5, selectInput( paste0("Details", i), label = NULL, choices = c("","a","b","c"), selected = "" ) ) ) ) }), fluidRow( tags$button( type = "button", id = "Save", class = "btn action-button", href = "#", "Save" ) ) ) }) }) # Run the application shinyApp(ui = ui, server = server) 

您可以通过将值存储到仅存储在一个session reactivevValues值来实现

 library(shinyjs) # needed for hide and show ui <- shinyUI(fluidPage( titlePanel("Update Select Inputs"), mainPanel( useShinyjs(), tags$head(tags$script(HTML("$(document).on('click', '.needed', function () { Shiny.onInputChange('last_btn',this.id); });"))), column(width = 6, uiOutput('ValuesAndButtons')), column(width = 6,hidden(wellPanel(id="det", lapply(1:3,function(i){ fluidRow( selectInput( paste0("Details", i), label = i, choices = c("","a","b","c"), selected = "" ) ) }), fluidRow( actionButton("Save","Save") ) )) )) ) ) server <- shinyServer(function(input, output,session) { saved_values=reactiveValues(data=NULL) output$ValuesAndButtons <- renderUI({ lapply(1:10,function(i){ fluidRow( column( width = 4, tags$span(i) ), column( width = 3, actionButton(paste0('ActionButton', i),"Edit",class="needed" ) ) ) } ) }) observe({ if(!is.null(input$last_btn)){ observeEvent(input[[input$last_btn]],{ shinyjs::show("det") } ) } }) observeEvent(input$last_btn,{ ll<-saved_values[[input$last_btn]] shinyjs::show("det") if(!is.null(ll) ){ for(i in 1:length(ll)){ updateSelectInput(session = session,inputId = names(ll)[[i]],selected = ll[[i]]) } }else{ shinyjs::reset("det") } }) observeEvent(input$Save,{ saved_values[[input$last_btn]]=lapply(names(input)[which(substring(names(input),1,7)=="Details")],function(i){ input[[ i]] }) names(saved_values[[input$last_btn]])=names(input)[which(substring(names(input),1,7)=="Details")] shinyjs::hide("det") }) }) # Run the application shinyApp(ui = ui, server = server)