【问题标题】:R Shiny: Reset selectizeInput selection upon actionButton inputR Shiny:在 actionButton 输入时重置 selectizeInput 选择
【发布时间】:2021-03-20 10:04:25
【问题描述】:

我正在尝试在 actionButton 输入时重置 selectizeInput 选择。

请参阅以下代码,其中我无法让 eventReactive 发挥作用:

library(shiny)

ui <- fluidPage(
  
  column(width = 4,algin = "center", uiOutput("choose_Number")) ,
  br(),
  column(width = 4, algin = "center",div(
    align = "center", actionButton('delete','Delete Number(s)',style="color: #fff; background-color: #53C1BE")))
  
  
  
  
)

server <- function(input, output, session) {
  
  
  output$choose_Number <- renderUI({
    selectizeInput("choose_Number", "Select Number", as.list(c(1,2,3,4)),selected = c(''), options=list(create=TRUE,'plugins' = list('remove_button'),
                                                                                               persist = FALSE), multiple = TRUE)
  })
  
  ##### I am trying to reset the selectizeInput upon input from the Delete button
  eventReactive(input$delete, {updateSelectizeInput("choose_Number", "Select Number", as.list(c(1,2,3,4)), selected = c(''),options=list(create=TRUE,'plugins' = list('remove_button'),
                                                                                                                 persist = FALSE), multiple = TRUE)} )
  
}

shinyApp(ui, server)


谢谢。

【问题讨论】:

  • observeEvent 是比eventReactive 更好的选择。

标签: r shiny


【解决方案1】:

最大的问题是会话丢失。如果您愿意,您可以省略 session 参数,但是您需要命名所有其他参数,因为 session 是第一个。第二个问题是您可以在selectizeInput 中设置multiple,但不能稍后在使用updateSelectizeInput() 更改它时。

小幅改进:手册建议使用character() 取消选择当前选项。正如@YBS 所提到的,您不提供反应值,因此observeEvent 是这里更好的选择。

PS:您确定要居中对齐列吗?看起来很奇怪。

library(shiny)

ui <- fluidPage(
  
  column(width = 4, align = "center", uiOutput("choose_Number")),
  br(),
  column(width = 4, align = "center", div(
    align = "center", 
    actionButton('delete', 'Delete Number(s)', style="color: #fff; background-color: #53C1BE"))
  )
)

server <- function(input, output, session) {
    
  output$choose_Number <- renderUI({
    selectizeInput("choose_Number", "Select Number", as.list(c(1,2,3,4)), selected = character(), 
                   options = list(create=TRUE,'plugins' = list('remove_button'), persist = FALSE), 
                   multiple = TRUE)
  })
  
  ##### I am trying to reset the selectizeInput upon input from the Delete button
  observeEvent(input$delete, {
    updateSelectizeInput(session, "choose_Number", choices = as.list(1:4), 
                         selected = character(0),
                         options = list(create=TRUE, 'plugins' = list('remove_button'), persist = FALSE))
    })
  
}

shinyApp(ui, server)

【讨论】:

  • 优秀。非常感谢@Jan 和 YBS。
猜你喜欢
  • 2018-11-08
  • 2018-12-06
  • 2017-12-29
  • 2021-06-10
  • 2019-05-20
  • 2019-07-31
  • 2022-01-12
  • 1970-01-01
  • 2018-06-11
相关资源
最近更新 更多