Eu fiz uma aplicação com flexdashboard
e usei a função actionButton
do pacote Shiny. Entretanto, quando o actionButton
é acionado, ele é acionado definitivamente. Isto é, tudo funciona (ex. renderValueBox
/ renderGauge
) após qualquer modificação nos widgets (ex. sliderInput
) após o clique.
E está bem, é sua característica mesmo.
Entretanto, eu gostaria que essa ação fosse única. Ou seja, “clicou, acionou e acabou”. Em outras palavras, quando fosse clicado, ele funcionaria uma vez e, mesmo após modificações nos widgets, os renderValueBox
e renderGauge
não se alterassem, a não ser se eu mudasse os widgets e clicasse de novo no actionButton
.
Meu código:
---
title: "Vamos somar?"
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**
```{r}
autonumericInput(
inputId = "a",
value = 0,
label = "Valor 1",
align = "center",
currencySymbol = "R$",
currencySymbolPlacement = "p",
decimalPlaces = 2,
digitGroupSeparator = ".",
decimalCharacter = ","
)
autonumericInput(
inputId = "b",
value = 0,
label = "Valor 2",
align = "center",
currencySymbol = "R$",
currencySymbolPlacement = "p",
decimalPlaces = 2,
digitGroupSeparator = ".",
decimalCharacter = ","
)
actionButton("execute", "Calcule")
```
```{r}
f_1 <- function(a, b) {
a + b
}
```
```{r}
reac <- eventReactive(input$execute, {
x = tibble(
a = input$a,
b = input$b
)
}, ignoreNULL = FALSE)
pred <- reactive({
temp <- reac()
f_1(
a = input$a,
b = input$b
)
})
```
abc{}
--------------------------------------
###
```{r}
renderValueBox({
valueBox(
value = scales::dollar(x = round(x = pred(), digits = 4), prefix = "R$ ", suffix = " real(is)", big.mark = ".", decimal.mark = ","),
caption = "Soma",
color = "steelblue",
icon = "fa-plus"
)
})
```
O código funciona, mas não da forma que eu gostaria. Eu tentei inserir o argumento ignoreNULL = FALSE
dentro da função eventReactive
. Ela ajuda, pois os renderValueBox
precisam aparecer quando eu executo o dashboard mas, o actionButton
deve funcionar apenas uma vez após cada clique.
Em outras palavras, procuro algo semelhante a função submitButton
, mas preciso de uma solução com actionButton
, por ser esta uma função mais recomendada.