R 更新 textInput 值的闪亮延迟

Posted

技术标签:

【中文标题】R 更新 textInput 值的闪亮延迟【英文标题】:R Shiny delay in updating textInput values 【发布时间】:2021-06-15 19:46:01 【问题描述】:

下面是一个带有 textInput 和 actionButton 的简单 R Shiny 应用程序示例,单击按钮后应该将文本值设置为 NULL 并打印 NULL 值,但是我观察到单击提交按钮后它仍然打印值在 textInput 中输入。谁能解释一下为什么更新 textInput 值会有这种延迟?

library(shiny)

ui <- fluidPage(
    textInput("text", "Test"),
    actionButton("Submit","Submit")
  
)

server <- function(input, output, session) 
  observeEvent(input$Submit,
      updateTextInput(session,"text", value = " ")
      print(input$text)
  )


shinyApp(ui, server)

运行应用程序后,如果我在文本输入中输入“hello”,我应该会在打印控制台上看到“”,但它会显示 input$text 的值,即打印控制台中的“hello”。显然,“”的赋值并没有按照它在代码中写入的顺序发生。

如果有人可以在 Shiny 应用中解释这种行为,请分享。 感谢您的宝贵时间和建议。

【问题讨论】:

【参考方案1】:

这种行为的原因是 updateTextInput(以及所有与此相关的 update*Input 函数)不会更新服务器函数中的 input 对象。相反,它向客户端(浏览器)发送一条消息以更改文本输入字段。并且当浏览器中的文本输入字段更新时,浏览器会向服务器发回input$text 已更改的信号。但在此之前,observeEvent块内的代码一直在执行,所以在执行print(input$text)时,值仍然是“hello”。

【讨论】:

感谢您的回答 Bobbel,这解释了更新输入函数的行为并且很有意义。但是,是否可以更新服务器上的文本值,该文本值将依次显示在浏览器中,以便下一行中的打印语句显示来自服务器的更新值。 这在一定程度上取决于您的实际应用程序有多复杂。一种解决方案是将要打印的信息存储在 reactiveValues 对象 (documentation) 中,而不是使用 input

以上是关于R 更新 textInput 值的闪亮延迟的主要内容,如果未能解决你的问题,请参考以下文章

我可以在闪亮的模块中使用 updateTextInput() 吗?

带有 r 闪亮 textInput 的 jQuery 掩码插件

r - 空 textInput() 导致传单闪亮应用程序出错

删除后如何将旧的反应输入存储在R闪亮中

闪亮 - textInput

是否有一个带有“重置”按钮的闪亮 textInput 小部件?