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

use*_*038 9 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())
  })

})
Run Code Online (Sandbox Code Playgroud)

ui.R

require(shiny)
require(shinyIncubator)

shinyUI(pageWithSidebar(
  headerPanel('Test'),

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

  mainPanel(

  )
))
Run Code Online (Sandbox Code Playgroud)

Joe*_*eng 4

在这里查看我的回复:

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

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