如何在 updateSelectInput 中使用反应式表达式?

How to use a reactive expression in updateSelectInput?

我知道必须在反应上下文中使用反应表达式,而 updateSelectInput 不是反应上下文。我在下面使用了一个 reprex,但在我的实际应用程序中,我得到了一些以 reactive() 方式处理的数据。我想在我的 select 输入中使用该数据的第一列,但我不知道该怎么做:

ui = fluidPage(
  selectInput("state", "Choose a state:",choices = NULL
              
  ),
  textOutput("result")
)

server <- function(input, output, session) {
  
    
    updateSelectInput(session, "state",
                      choices = hello())
    hello<-reactive({mtcars[1]})
    
}

只需将 updateSelectInput 包裹在观察者中即可:

library(shiny)

ui = fluidPage(
  selectInput("state", "Choose a state:", choices = NULL),
  textOutput("result")
)

server <- function(input, output, session) {
  hello <- reactive({mtcars[1]})
  observe({
    freezeReactiveValue(input, "state")
    updateSelectInput(session, "state", choices = hello())
    })
}

shinyApp(ui, server)