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

如何在Shiny的app.R中添加更新按钮并实现点击才更新数据的效果

你当前的代码存在两个核心问题导致参数自动更新:

  1. 输出的renderText直接绑定了实时变化的input$fruitchoice、input$amt控件值,只要控件值发生变化,输出就会同步更新,和你定义的eventReactive没有任何关联
  2. 你定义的SelectInput响应式变量内部调用runif的逻辑完全错误,也没有返回我们需要的订单参数,属于无效代码
    另外selectInput的默认选中值"Percent White"不在可选水果列表内,属于小bug。
修复后完整代码
library(shiny)
ui <- fluidPage(
  titlePanel("My Simple App"),
  
  sidebarLayout(
    sidebarPanel(
      helpText("Controls for my app"),
      
      selectInput("fruitchoice", 
                  label = "Choose a fruit",
                  choices = list("Apples", 
                                 "Oranges",
                                 "Mangos", 
                                 "Pomegranate"),
                  selected = "Apples"), # 修正默认选中值为可选列表内的项
      
      sliderInput("amt", 
                  label = "Order Amount:",
                  min=0, max = 100, value=20),
      
      actionButton ("Update","Update Order")
    ),
    
    mainPanel(
      helpText("Fruit Chosen:"),
      verbatimTextOutput("fruit"),
      helpText("Order Amount"),
      verbatimTextOutput("amt")
    )
  )
)

server <- function(input, output) {
  # 仅在点击Update Order按钮时才更新订单信息
  # 保留ignoreNULL = FALSE则页面加载时就显示默认值,无需等待第一次点击,不需要可删除该参数
  order_info <- eventReactive(input$Update, {
    list(
      fruit = input$fruitchoice,
      amt = input$amt
    )
  }, ignoreNULL = FALSE)
  
  output$fruit = renderText(order_info()$fruit)
  output$amt = renderText(order_info()$amt)
}
# Run the application 
shinyApp(ui = ui, server = server)
改动说明
  • 修正了selectInput的默认选中值,避免初始化报错
  • 重写了eventReactive逻辑,点击按钮时将当前选择的水果、数量打包为列表返回
  • 两个输出不再读取实时的控件值,改为仅读取点击按钮后才更新的order_info响应式变量,实现只有点击按钮才同步参数的效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:15:06