【问题标题】:How to make shiny inputs observe and reset each other如何让闪亮的输入相互观察和重置
【发布时间】:2020-11-19 12:49:01
【问题描述】:

我正在尝试制作一个闪亮的应用程序。
当我更改单个输入(cyl)时,我希望将第二个输入(齿轮)重置为空白值。 (反之亦然)。
我的问题是,当我重置单个输入时,似乎同时重置了两个输入。
换句话说,将 (cyl) 更改为 6 会将 (gear) 重置为空白,但这也会将 (cyl) 重置为空白。
最后一种行为是我试图避免的。
感谢您的帮助。

这是一个代表。

library(shiny)

df <- mtcars

ui <- fluidPage(
  
  uiOutput("cyl_select")  ,
  uiOutput("gear_select") 
  
  
  
)

server <- function(input, output, session) {
  
  output$cyl_select <- renderUI({
    
    selectInput("cyl_select", "cyl_select", unique(c(" ", df$cyl)), selected = c(" "))
    
  })
  
  observeEvent(input$gear_select != " ", 
               {
                 
                 updateSelectInput(session, "cyl_select", selected = c(" "))
                 
               })
  
  
  output$gear_select <- renderUI({
    
    
    selectInput("gear_select", "gear_select", unique(c(" ", df$gear)), selected = c(" "))

    
  })
  
  
  observeEvent(input$cyl_select != " ", 
               {
                 
                 updateSelectInput(session, "gear_select", selected = c(" "))
                 
               })

}

shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r shiny shiny-reactivity


    【解决方案1】:

    您需要将!= " " 检查移到观察者的函数中。这应该有效:

    library(shiny)    
    df <- mtcars    
    ui <- fluidPage(      
      uiOutput("cyl_select"),
      uiOutput("gear_select")
    )
    
    server <- function(input, output, session) {      
      output$cyl_select <- renderUI({        
        selectInput("cyl_select", "cyl_select", unique(c(" ", df$cyl)), selected = c(" "))        
      })
      
      observeEvent(input$gear_select, {
                    if (input$gear_select  != " ")  {
                      updateSelectInput(session, "cyl_select", selected = c(" "))
                    }                     
                   })
      
      
      output$gear_select <- renderUI({        
        selectInput("gear_select", "gear_select", unique(c(" ", df$gear)), selected = c(" "))      
        
      })
      
      
      observeEvent(input$cyl_select, {
                     if (input$cyl_select != " ") {
                        updateSelectInput(session, "gear_select", selected = c(" "))
                     }                     
                   })      
    }
    
    shinyApp(ui = ui, server = server)
    

    【讨论】:

    • 嗯,很有道理,感谢帮助
    猜你喜欢
    • 2019-03-12
    • 2017-08-06
    • 2020-05-24
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2020-12-17
    • 2018-09-25
    相关资源
    最近更新 更多