[英]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.