【发布时间】:2019-08-15 02:39:11
【问题描述】:
在以下示例中,似乎创建了重复的输入元素,尽管每次登录/注销都会重新呈现 output$app。
library(shiny)
user <- reactiveValues(logged_on = 0)
ui <- fluidPage(
uiOutput("app")
)
server <- function(input, output) {
observe({
if (user$logged_on == 1) {
output$app <- renderUI({
list(
uiOutput("container1"),
uiOutput("container2")
)
})
output$container1 <- renderUI({
actionButton("logout", "Logout")
})
output$container2 <- renderUI({
actionButton("clickme", "Click Me")
})
observeEvent(input$clickme, {
print("got clicked!")
})
observeEvent(input$logout, ignoreInit = TRUE, {
user$logged_on <- 0
})
} else {
output$app <- renderUI({
actionButton("login", "Login")
})
observeEvent(input$login, ignoreInit = TRUE, {
user$logged_on <- 1
})
}
})
}
shinyApp(ui, server)
单击Login 后跟Click Me 会提示got clicked! 一次。但是通过Logout>Login>Click Me重复该过程后提示消息两次,以此类推。
使用...检查此问题
x <- reactiveValuesToList(input)
print(x)
...确认创建了输入元素的副本。为什么会发生这种情况,我该如何预防?
【问题讨论】: