当使用 shinyjs 单击 actionButton 时,反应值不会更新

问题描述 投票:0回答:0

我有一个闪亮的应用程序,其中一个

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. “上”输入将根据“下”输入中的值自动更新
  2. “Upper”输入中的(新)值(来自第 1 步)将打印到控制台
  3. “上”输入(来自步骤 1)中的(新)值将呈现为按钮下方的文本。

然而,只有期望 1 实际发生(更新“Upper”输入)。但是,控制台打印输出和文本渲染仍设置为以前的值(在下面的例子中为“A”)。

更改“Lower”输入并再次单击“Update 1”显示呈现的文本已更新为“Lower”中的第一个选择(在本例中为“M”)。本质上,呈现的文本总是落后一个选择。

我知道

shinyjs::click("b2")
正确触发,因为
print()
语句输出到控制台,但是值
input$pu
似乎总是落后一个选择。我需要更改什么以便在
input$pu
触发时可以使用
shinyjs::click("b2")
的更新值?

r shiny shiny-reactivity shinyjs
© www.soinside.com 2019 - 2024. All rights reserved.