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

如何在flexdashboard中用actionButton替代submitButton触发renderValueBox计算

问题原因

你的代码无法实现点击才触发计算的核心问题是响应式依赖没有完全和按钮绑定:

  1. pred响应式变量虽然调用了reac(),但最终计算还是直接依赖input$a、input$b,这两个输入值变化时会直接触发pred更新,进而让renderValueBox自动运行
  2. eventReactive的ignoreNULL参数设为FALSE,会导致页面初始化时就自动执行一次计算,不需要点击按钮

修正后的完整代码

---
title: "Sum"
runtime: shiny
output: 
  flexdashboard::flex_dashboard:
    orientation: rows
    vertical_layout: fill
    theme: yeti
---

side{.sidebar}
-------------------------------------------

```{r}
library(tibble)
library(shiny)
library(shinyWidgets)
library(flexdashboard)
library(scales)

Análise

autonumericInput(
inputId = "a", 
value = 0, 
label = "Value 1", 
align = "center", 
currencySymbol = "R$", 
currencySymbolPlacement = "p",
decimalPlaces = 2,
digitGroupSeparator = ".",
decimalCharacter = ","
)

autonumericInput(
inputId = "b", 
value = 0, 
label = "Value 2", 
align = "center", 
currencySymbol = "R$", 
currencySymbolPlacement = "p", 
decimalPlaces = 2,
digitGroupSeparator = ".",
decimalCharacter = ","
)

actionButton("execute", "Calcule")
f_1 <- function(a, b) {
  a + b
}
# 所有计算逻辑完全绑定到按钮点击事件,ignoreNULL默认TRUE,初始化不执行
pred <- eventReactive(input$execute, {
  f_1(
    a = input$a, 
    b = input$b
  )
})

abc{}

renderValueBox({
  valueBox(
    value = scales::dollar(x = round(x = pred(), digits = 4), prefix = "$ ", suffix = " dollar(s)", big.mark = ",", decimal.mark = "."), 
    caption = "Sum", 
    color = "steelblue", 
    icon = "fa-plus"
  )
})
### 效果说明
修改后只有点击「Calcule」按钮时才会触发求和计算,修改`a`、`b`两个输入框的值不会自动更新ValueBox的结果,完全符合需求。

内容的提问来源于stack exchange,提问作者neves
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:24:01