r-闪亮的conditionalPanel()似乎评估不正确.如何使UI基于服务器端逻辑隐藏某些内容



我正在尝试制作一个简单的应用程序,在用户登录ind:之前隐藏信息

library(shiny)
library(glue)
library(tidyverse)
server <- function(input, output, session) {
#check login
logged_in = eventReactive(input$login, {
if (input$username == "test" && input$password == "test") {
return(T)
} else {
return(F)
}
})

username = reactive(input$username)

output$login_status = logged_in

output$login_status_text = renderText({
if (logged_in()) {
return(glue("Logged in as: {username()}"))
} else {
return("Not logged in / incorrect login")
}
})

output$data = renderDataTable({
if (logged_in()) {
y = iris
} else {
y = tibble(text = "This should not be seen!")
}
y
})
}
ui <- fluidPage(
textInput("username", "What's your username?"),
passwordInput("password", "What's your password?"),
actionButton("login", "Login!"),
textOutput("login_status_text"),
#show secret data if logged in
conditionalPanel(condition = "output.login_status()", {
dataTableOutput("data")
})
)

shinyApp(ui, server)

问题是,这个条件在某种程度上总是被评估为真的。我尝试过output.login_status,它总是被评估为FALSE。如何使UI显示/隐藏基于输出服务器端而非输入客户端值的内容?

您必须在服务器中添加以下行:

outputOptions(output, "login_status", suspendWhenHidden = FALSE)

像这样:

output$login_status = reactive(logged_in())
outputOptions(output, "login_status", suspendWhenHidden = FALSE)

此外,条件应该是:

condition = "output.login_status"

最新更新