(闪亮)renderUI中的数据持久性

时间:2016-01-14 23:16:36

标签: r shiny reactive-programming

我正在使用renderUI根据用户在下拉列表中的选择来更改用户看到的数据输入窗口小部件。我需要保留他们的条目 - 即如果用户输入5,即使他们在不同菜单之间移动,该输入也需要保持5。目前,每次在视图之间切换时,数据都会重置为默认值。如何在此上下文中使用renderUI时保留数据?它似乎与引用自身的输入对象的反应性有关...

下面的最低示例

#ui.R
shinyUI(fluidPage(sidebarPanel(

 #when which widgets are shown changes based on input here...
 selectInput(inputID = "dropdown", label = "dropdown", choices = c("number", "date")), 

 uiOutput("my_ui")
 )))

#server.r
shinyServer(function(input, output) {
 output$my_ui <- renderUI({

  #any user input here is lost (reverts to default) upon changing views
  switch(input$dropdown,
        "number" = numericInput(inputID = "num_in", label = "foo", value = 0), 
        "date" = dateInput(inputID = "date_in", label = "bar", value = NULL))
 })
})

1 个答案:

答案 0 :(得分:1)

您经常会看到一个定义为

的函数
`%||%` <- function(x, y) if (is.null(x)) y else x

如果x为null,则返回y。您可以在renderUI中使用它,

switch(input$dropdown,
       "number" = numericInput(inputId = "num_in", label = "foo", 
                               value = input$num_in %||% 0), 
       "date" = dateInput(inputId = "date_in", label = "bar", 
                          value = input$date_in %||% NULL))
})

注意:我将inputID更改为inputId