繁体   English   中英

如何在shinyapp中以交互方式更改UI

[英]how to change UI interactively in shinyapp

我想让用户界面从textarea以交互方式更改为selectInput,然后再返回。

这就是我放在server.r中的内容。 我使用counter1和counter2让shinyapp知道选择哪个动态ui。 点击提交按钮时,会向counter1或counter2添加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。 显然这不是我想要的。 有谁知道这里出了什么问题? 我想我错过了什么。

提前谢谢了!

而不是submitButton,使用actionButton("counter")并检查dynamicUi input$counter是偶数还是奇数。

你的代码不起作用的原因是因为像dynamicUi这样的反应式表达式仅在它们读取的反应值(或其他反应式表达式,或者像invalidateLater类的其他反应性函数)中执行时才会触发反应。 在这种情况下, dynamicUI不会读取任何被动值,因此它不会执行多次。 但是如果你使用actionButton("counter")并读取input$counter那么每当input$counter更改时,反应式表达式将重新执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM