闪亮 - renderUI()的反应性问题

时间:2013-06-18 11:22:39

标签: r shiny

我在R中遇到了Shiny包的困难。

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

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

使用“#Option 1”时,实际上该值部分更改为“abc”。打开Goog​​le Chrome的inspect元素后,您可以看到“#Option 2”更改每次按下按钮时的值,“#Option 1”也会将值更改为“abc”,但屏幕仅在按钮时更新是第一次按下。

以下是代码:

server.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(

  )
))

2 个答案:

答案 0 :(得分:4)

请在此处查看我的回复:

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

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

答案 1 :(得分:1)

这看起来似乎某处隐藏着一个错误,但我无法追踪它。

好消息是,我认为您应该能够使用updateTextInput功能完成此效果。

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