【问题标题】:Shiny - problems with renderUI()'s reactivityShiny - renderUI() 的反应性问题
【发布时间】:2013-06-18 11:22:38
【问题描述】:

我在 R 中使用 Shiny 包时遇到了困难。

我试图理解为什么 server.R 中的“# Option 1”不起作用,但评论“# Option 2”确实起作用。在“# Option 1”处于活动状态时,尝试输入随机字符串并按下按钮。第一次它用“abc”替换文本框中的值,但下一次都没有。

在我的理解中val()已经依赖于input$change,所以每次按下按钮都必须重新执行,而且“#Option 2”被包裹到了isolate()中,所以它没有添加任何反应性。

使用“# Option 1”时,实际上该值似乎部分更改为“abc”。打开谷歌浏览器的检查元素,您可以看到“# Option 2”每次按下按钮时都会更改值,“# Option 1”也会将值更改为“abc”,但屏幕仅在按钮时更新第一次按下。

代码如下:

服务器.R

require(shiny)

shinyServer(function(input, output) {

  val <- reactive({
    if(input$change>0) {
     # Option 1
      'abc'
#       # Option 2
#       isolate({
#         paste('abc',input$txt,"")
#       })
    } else {
      ''
    }
  })

  output$textbox <- renderUI({
    textInput("txt","Text",val())
  })

})

ui.R

require(shiny)
require(shinyIncubator)

shinyUI(pageWithSidebar(
  headerPanel('Test'),

  sidebarPanel(
    uiOutput("textbox"),
    actionButton("change", "Change")
  ),

  mainPanel(

  )
))

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    在这里查看我的回复:

    https://groups.google.com/d/msg/shiny-discuss/PLHauRlFw3k/AnoD7NusvDIJ

    要点是服务器不断向textbox 输出发送完全相同的值,因此客户端“聪明”到足以忽略它。

    【讨论】:

    • 谢谢!我通过在文本输入值末尾添加一个空格并在输入值末尾有空格时删除一个空格来解决问题,因此新值将始终与前一个值不同。无论如何我都会修剪所有传入的字符串。
    【解决方案2】:

    这看起来确实是某个地方隐藏了一个错误,但我无法找到它。

    好消息是,我认为你应该可以使用updateTextInput 函数来完成这个效果。

    不过,为了更深入地了解这个问题,我为此创建了一个错误。 https://github.com/rstudio/shiny/issues/181 。如果/当我们弄清楚发生了什么时,我会尝试更新这篇文章。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 2020-05-01
      • 2021-11-13
      • 1970-01-01
      相关资源
      最近更新 更多