繁体   English   中英

在闪亮的应用程序中使用观察事件进行 numericInput

[英]using observeEvent for numericInput in shiny app

我有一个简单的闪亮应用程序,如果用户输入大于阈值,我想显示警告。

library(shiny)
library(shinyalert)

ui <- fluidPage(
  numericInput("obs", "Observations:", 1),
  verbatimTextOutput("value")
)
server <- function(input, output) {
  observeEvent(input$obs,{
    if(!is.na(input$obs) && input$obs >10){
      shinyalert("warning!", "input too big", type = "warning")
    }
  })
  output$value <- renderText({ input$obs })
}
shinyApp(ui, server)

如果用户提供输入的速度不够快,假设对于input$obs = 110 ,我们在输入第二个和第三个值之间有 1 秒的延迟,弹出警告将出现! 我应该如何解决这个问题?

使用来自shinyCatchspsComps让您的生活更轻松

library(shiny)
library(spsComps)
ui <- fluidPage(
    numericInput("obs", "Observations:", 1),
    verbatimTextOutput("value")
)
server <- function(input, output) {
    output$value <- renderText({ 
        shinyCatch({
            if(!is.na(input$obs) && input$obs >10) warning("input too big")
        }, blocking_level = "warning", prefix = "")
        
        input$obs 
    })
}
shinyApp(ui, server)

blocking_level = "warning"被指定时,会在renderText表达式中的代码之后出现shinyCatch块。 所以当你的数字大于 10 时,新的input$obs将不会被渲染。

这是用户看到的

在此处输入图像描述

这是开发人员在控制台中看到的内容在此处输入图像描述

您可以使用闪亮本身的showNotification()

library(shiny)

ui <- fluidPage(
  numericInput("obs", "Observations:", 1),
  verbatimTextOutput("value")
)
server <- function(input, output) {
  observeEvent(input$obs,{
    if(!is.na(input$obs) && input$obs >10){
      showNotification(
        ui = tags$h4("Input Too Big!"), 
        type = "warning"
      )
    }
  })
  output$value <- renderText({ input$obs })
}
shinyApp(ui, server)

{shinytoastr}

library(shiny)
library(shinytoastr)

ui <- fluidPage(
  shinytoastr::useToastr(), 
  
  numericInput("obs", "Observations:", 1),
  verbatimTextOutput("value")
)
server <- function(input, output) {
  observeEvent(input$obs,{
    if(!is.na(input$obs) && input$obs >10){
      shinytoastr::toastr_warning(
        message = "Decrease it.", 
        title = "Input too big!"
      )
    }
  })
  output$value <- renderText({ input$obs })
}
shinyApp(ui, server)

或 @lz100 提到的{spsComps} 这是你的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM