【问题标题】:how to change UI interactively in shinyapp如何在 shinyapp 中以交互方式更改 UI
【发布时间】:2013-12-08 11:34:30
【问题描述】:

我想让用户界面以交互方式从 textarea 变为 selectInput 并再次返回。

这是我放在 server.r 中的。我使用 counter1 和 counter2 让 shinyapp 知道选择哪个动态 ui。当点击提交按钮时,计数器 1 或计数器 2 将添加 1。这样 counter1 和 counter2 将交替相同或不同。

 library(shiny)
counter1 <- 1
counter2 <- 0
shinyServer(function(input, output) {

output$MainAction <- renderUI( {
    dynamicUi()
  })

dynamicUi <- reactive({
if (counter11 == counter2){
counter1 <- counter1 + 1
return(
selectInput("choose","Choose yes or no", choices = c("yes"="yes","no"="no"))
)
}
else {
counter2 <- counter2 + 1
return(  
tags$textarea(id="textfield", rows=8, cols=90, "put your text here")
)
}
})
})

这就是我放入 ui.r 的内容

library(shiny)

shinyUI(pageWithSidebar(


headerPanel("My shiny app"),

sidebarPanel(

uiOutput("MainAction"), 
submitButton("action")    

  ),


  mainPanel(
    tabsetPanel(
      tabPanel("Output", uiOutput("outputaction"))

    )
  )
))

结果是 shinyapp 与 textarea 保持一致。显然这不是我想要的。有谁知道这里出了什么问题?我想我错过了什么。

非常感谢!

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    使用actionButton("counter") 代替submitButton,并检查input$counterdynamicUi 中是偶数还是奇数。

    您的代码不起作用的原因是因为像dynamicUi 这样的反应式表达式只有在他们读取的反应式值(或另一个反应式表达式,或其他一些反应式事物,如invalidateLater)导致反应被触发时才会执行。在这种情况下,dynamicUI 不会读取任何反应值,因此它不会执行多次。但是,如果您使用actionButton("counter") 并阅读input$counter,那么每当input$counter 更改时,反应式表达式就会重新执行。

    【讨论】:

    • 谢谢乔!我现在让它工作了。我想我太专注于为什么我的“解决方案”不起作用。
    猜你喜欢
    • 1970-01-01
    • 2022-10-23
    • 2013-04-16
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    相关资源
    最近更新 更多