我有两个actionButtons,允许通过数字1-6导航。然而,我希望只有在数字1显示时才删除“后退”按钮(否则保留),而在数字6上删除“下一步”按钮(并保留整个数字1-5),以便为序列的开始和结束提供直观的帮助。
请看我在底部的不成功代码(#被注释掉了,因为它阻止了从数字2到5的成功转换)。
如何有条件地呈现这些按钮?
library(shiny)
library(shinyWidgets)
ui <- fluidPage(
fluidRow(
div(column(5,uiOutput("back"),align= "right")),
div( column(5,uiOutput("next_q")),align = "left")),
fluidRow(
column(5,offset = 3,id = "qa1", uiOutput("ui_q1"),br(),br(),
)),
)
server <- function(input, output, session) {
qbank=reactive(as.vector(c(1,2,3,4,5,6)))
values <- reactiveValues()
values$count <- 1
myReactives <- reactiveValues(reactInd = 0)
observe({
input$next_q
myReactives$reactInd <- 1
})
observe({
input$back
myReactives$reactInd <- 2
})
ntext <- eventReactive(input$next_q,{
if(values$count != length(qbank())){
values$count <- values$count + 1
return(qbank()[values$count])
}
else{
return(qbank()[length(qbank())])
}
})
btext <- eventReactive(input$back,{
if(values$count != 1){
values$count <- values$count - 1
return(qbank()[values$count])
}
else{
return(qbank()[1])
}
})
q <- reactive({
if(input$next_q == 0){
return(qbank()[1])
}
else if(myReactives$reactInd==1) return(
ntext())
else if(myReactives$reactInd==2)return(
btext())
})
q1 = reactive((q()[1]))
output$q1 = renderText(q1())
output$ui_q1 = renderUI(textOutput("q1"))
output$back = renderUI({
## I cannot get the following if statement to function correctly
# if(values$count==1) return (NULL)
# else
(actionButton("back","back"))})
output$next_q = renderUI(
## I cannot get the following if statement to function correctly
# if(values$count==length(qbank()))
# return (NULL)
# else
actionButton("next_q","next"))
}
shinyApp(ui, server)谢谢
发布于 2021-06-17 05:56:40
我构建了一个玩具示例,演示如何在值为1时删除back按钮,在值为6时删除next按钮。从这个工作示例中,您可以调整代码以类似的方式工作:
library(shiny)
ui <- fluidPage(
fluidRow(column(12,align="center",textOutput("currentNum"))),
fluidRow(
column(6,align="right",uiOutput("backBut")),
column(6,align="left",uiOutput("nextBut"))
)
)
server <- function(input, output) {
rv <- reactiveValues(currPage=1)
observeEvent(input$backButton,{
rv$currPage <- rv$currPage - 1
})
observeEvent(input$nextButton,{
rv$currPage <- rv$currPage + 1
})
output$currentNum <- renderText({rv$currPage})
output$backBut <- renderUI({
if(rv$currPage>1){
actionButton("backButton","< Back")
}
})
output$nextBut <- renderUI({
if(rv$currPage<6){
actionButton("nextButton","Next >")
}
})
}
shinyApp(ui = ui, server = server)



https://stackoverflow.com/questions/68010315
复制相似问题