9

我在 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())
  })

})

用户界面

require(shiny)
require(shinyIncubator)

shinyUI(pageWithSidebar(
  headerPanel('Test'),

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

  mainPanel(

  )
))
4

2 回答 2

4

在这里查看我的回复:

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

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

于 2013-06-19T17:25:12.190 回答
1

这看起来确实可能在某个地方隐藏了一个错误,但我无法追踪它。

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

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

于 2013-06-19T05:05:04.573 回答