闪亮-renderUI()和#x27存在问题;s反应性

闪亮-renderUI()和#x27存在问题;s反应性,r,shiny,R,Shiny,我在R中遇到使用闪亮包装的困难 我试图理解为什么server.R中的“#选项1”不起作用,但注释了“#选项2”起作用。在“#选项1”处于活动状态时,尝试键入随机字符串并按下按钮。第一次它将文本框中的值替换为“abc”,但接下来的所有时间都不会 据我所知,val()已经依赖于输入$change,因此每次按下按钮时它都必须重新执行,而且“#选项2”被包装到了隔离()中,因此它不会增加任何反应性 使用“#选项1”时,该值似乎部分变为“abc”。打开Google Chrome的inspect元素后,您可

我在R中遇到使用闪亮包装的困难

我试图理解为什么server.R中的“#选项1”不起作用,但注释了“#选项2”起作用。在“#选项1”处于活动状态时,尝试键入随机字符串并按下按钮。第一次它将文本框中的值替换为“abc”,但接下来的所有时间都不会

据我所知,val()已经依赖于输入$change,因此每次按下按钮时它都必须重新执行,而且“#选项2”被包装到了隔离()中,因此它不会增加任何反应性

使用“#选项1”时,该值似乎部分变为“abc”。打开Google Chrome的inspect元素后,您可以看到“#选项2”会更改每次按下按钮时的值,#选项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())
  })

})

这看起来确实有可能是一个错误隐藏在那里的某个地方,但我无法找到它

好消息是,我认为您应该能够通过
updateTextInput
函数实现这一效果

为了更深入地了解这个问题,我已经为此创建了一个bug。如果我们弄清楚发生了什么,我会尝试更新这篇文章。

请看我的回复:


要点是服务器一直向
文本框发送完全相同的值,因此客户端“聪明”到可以忽略它。

谢谢!我解决了这个问题,在文本输入值的末尾添加了一个空格,如果输入值的末尾有空格,则删除一个空格,这样新值将始终与前一个值不同。无论如何,我都会修剪所有传入的字符串。
require(shiny)
require(shinyIncubator)

shinyUI(pageWithSidebar(
  headerPanel('Test'),

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

  mainPanel(

  )
))