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