You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shiny应用中shinyjs在observeEvent内无法执行全部操作的问题

问题原因

你的代码里updateSelectInput是异步操作,它不会立刻修改server端的input$selector值,要等当前的observeEvent执行完毕、进入下一个反应周期才会生效。而你紧接着调用shinyjs::click("generate")时,input$selector还是旧值,导致reactive对象data()取到的不是重置后的1对应的数据。

解决方案

在shinyjs::click之前调用session$flushReact(),强制Shiny立即刷新反应式值,让input$selector的更新提前生效。

修改后的完整代码:

library(shiny)
library(dplyr)

ui <- fluidPage(
  shinyjs::useShinyjs(),
  
  selectInput("selector", label = "Carb selector", choices = unique(mtcars$carb)),
  actionButton("generate", "OK!"),
  tableOutput("results"),
  actionButton("reset", "RESET"),
  
)

server <- function(input, output, session) {
  
  data <- reactive({
    req(input$generate)
    isolate(
      mtcars %>% filter(carb == input$selector)
    )
  })
  
  output$results <- renderTable(data())

  observeEvent(input$reset, {
    
    updateSelectInput(session, 
                      inputId = "selector",
                      label = "Carb selector updated",
                      choices = unique(mtcars$carb),
                      selected = 1)
    
    session$flushReact()
    shinyjs::click("generate")
    
  })
    
}

shinyApp(ui, server)

补充说明:原代码使用了%>%管道符,需要提前加载dplyr包,否则会出现函数未定义的错误。

内容的提问来源于stack exchange,提问作者David Jorquera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:05:22