【问题标题】:Using Shiny Reactive使用闪亮的反应
【发布时间】:2020-10-13 19:29:58
【问题描述】:

问题:我需要设置两个标志; 'valid' 标志和 'test' 标志,如果单击了相应的操作按钮。 例如,如果单击“测试”按钮,则测试标志将为真,有效标志将为假。第二次,我再次单击“有效”按钮,然后有效标志应为真,测试标志应为假。无论每个按钮单击多少次,当前单击该按钮的标志将为 True,第二次为 False。因此,在任何时候,两个标志都不应该同时为 True。

我无法做到这一点。对于第一次单击每个按钮,结果与预期的一样,但在第二次单击同一按钮之后,没有得到想要的结果。

if (interactive()) {
  shinyApp(
    ui = basicPage(
      actionBttn("valid", "Validate:"),
      actionBttn("test", 'Test')
    ),
    server = function(input, output, session) {
      observeEvent(c(input$valid, input$test), {
        valid <- ifelse(input$valid > 0, T, F) #validation.flag() 
        test <- ifelse(input$test > 0, T, F)  #prediction.flag()
        print(valid)
        print(test)
        print("")
        # do something based on valid and test flag
      })
    }
  )
}

【问题讨论】:

    标签: r shiny reactive


    【解决方案1】:

    动作按钮的值是其被点击次数的count,因此您必须存储它以确定它是否被再次点击。

    这里最简单的解决方案是有 2 observeEvents,每个按钮一个,并以单击的按钮作为参数调用函数:

    library(shiny)
    library(shinyWidgets)
    
    shinyApp(
    
        ui = basicPage(
            actionBttn("valid", "Validate"),
            actionBttn("test", 'Test')
        ),
    
        server = function(input, output, session) {
            my_function <- function(is_test) {
                if (is_test)
                    print("Test clicked")
                else
                    print("Validate clicked")
            }
            
            observeEvent(input$test, my_function(TRUE))
            observeEvent(input$valid, my_function(FALSE))
        }
    )
    

    【讨论】:

      猜你喜欢
      • 2013-07-16
      • 1970-01-01
      • 2019-09-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 2015-06-23
      • 2014-08-23
      • 2016-02-22
      相关资源
      最近更新 更多