我有一个闪亮的应用程序,其中一个
pickerInput()
根据另一个pickerInput()
中选择的值进行更新。
library("shiny")
library("shinyWidgets")
ui <- fluidPage(
shinyjs::useShinyjs(),
tags$h2("Update pickerInput"),
fluidRow(
column(
width = 5, offset = 1,
pickerInput(
inputId = "pl",
label = "Lower",
choices = letters
)
),
column(
width = 5,
pickerInput(
inputId = "pu",
label = "Upper",
choices = LETTERS
)
)
),
fluidRow(
column(
width = 10, offset = 1,
actionButton("b1", label = "Update 1"),
actionButton("b2", label = "Update 2"),
textOutput("pu_printed"),
)
)
)
server <- function(input, output, session) {
observeEvent(input$b1, {
updatePickerInput(
session = session, inputId = "pu",
selected = LETTERS[letters == input$pl]
)
shinyjs::click("b2")
})
pur <- eventReactive(input$b2, {
print(input$pu)
input$pu
})
output$pu_printed <- renderText({
paste("Selected Upper: ", pur())
})
}
shinyApp(ui = ui, server = server, options = list(launch.browser = TRUE))
我希望在使用“较低”输入选择一个值并单击“更新 1”按钮后,应该发生以下情况:
然而,只有期望 1 实际发生(更新“Upper”输入)。但是,控制台打印输出和文本渲染仍设置为以前的值(在下面的例子中为“A”)。
更改“Lower”输入并再次单击“Update 1”显示呈现的文本已更新为“Lower”中的第一个选择(在本例中为“M”)。本质上,呈现的文本总是落后一个选择。
我知道
shinyjs::click("b2")
正确触发,因为 print()
语句输出到控制台,但是值 input$pu
似乎总是落后一个选择。我需要更改什么以便在 input$pu
触发时可以使用 shinyjs::click("b2")
的更新值?