我在R中遇到了Shiny包的困难。
我试图理解为什么server.R中的“#Option 1”不起作用,但评论“#Option 2”确实有效。在“#Option 1”处于活动状态时,尝试输入随机字符串并按下按钮。第一次用“abc”替换文本框中的值,但接下来的所有时间都没有。
在我的理解中,val()已经依赖于输入$ change,所以每次按下按钮都必须重新执行,而且“#Option 2”被包装到isolate()中,所以它不会添加任何反应性。
使用“#Option 1”时,实际上该值部分更改为“abc”。打开Google 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(
)
))
答案 0 :(得分:4)
请在此处查看我的回复:
https://groups.google.com/d/msg/shiny-discuss/PLHauRlFw3k/AnoD7NusvDIJ
要点是服务器不断向textbox
输出发送完全相同的值,因此客户端“智能”足以忽略它。
答案 1 :(得分:1)
这看起来似乎某处隐藏着一个错误,但我无法追踪它。
好消息是,我认为您应该能够使用updateTextInput
功能完成此效果。
为了更深入地了解这个问题,我为此创建了一个错误。 https://github.com/rstudio/shiny/issues/181。如果/当我们弄清楚发生了什么时,我会尝试更新这篇文章。