Cambiar el color del actionButton cuando se hace clic en el botón en Shiny R.
Tengo un actionButton definido en la interfaz de usuario como uiOutput(“DartSearchAdv”). Me gustaría que el botón cambie de color cuando se modifica input$target_min_ab. Y cuando se presiona input$DartSearchAdv, quiero que el color vuelva a la configuración predeterminada.
He intentado implementar la sugerencia aquí, y el cambio de color funcionará como se desea, pero ciertas salidas generadas desde la pulsación del botón están ocultas (“mainPanelDST”). Puedo intentar hacer que aparezcan si hago show(“mainPanelDST”), pero entonces el cambio de color no se produce, o el botón desaparecerá hasta que se interactúe con input$target_min_ab nuevamente.
A continuación se muestra el código relevante del servidor.
“`{r}
global <- reactiveValues(clicked = FALSE)
<h1>Estilo deseado cuando se hace clic en el botón</h1>
defaultColor = 'padding:10px; font-size:120%;
color: white; background-color: #3E668E;
border-color: #2C3E50';
<h1>Estilo deseado cuando se cambia una configuración</h1>
updateColor = 'padding:10px; font-size:120%;
color: white; background-color: #428BCA;
border-color: #95A5A6';
<h1>Renderizar el botón</h1>
output$DartSearchAdv <- renderUI({
if (global$clicked){
actionButton("DartSearchAdv", "Actualizar Búsqueda",
style = defaultColor)
} else {
actionButton("DartSearchAdv", "Actualizar Búsqueda",
style = updateColor)
}
<pre><code>})
</code></pre>
<pre><code><br />Y aquí están las entradas que deberían cambiar de color
“`{r}
# Entrada que cambia el color a updateColor
observeEvent(input$target_min_ab,{
rv$target_min_ab = input$target_min_ab/100;
global$clicked = FALSE;
})
# Entrada que cambia el color a predeterminado
trigger_button2 <- eventReactive(input$DartSearchAdv, {
# Hacer cosas aquí
global$clicked = TRUE
}
davy.ai
Para lograr el comportamiento deseado, puedes utilizar la función
observeEvent()
para detectar cambios eninput$target_min_ab
y actualizar el parámetrostyle
delactionButton()
en consecuencia.Además, puedes utilizar otro
observeEvent()
para detectar cuando se presionainput$DartSearchAdv
y establecer la variableglobal$clicked
enFALSE
, lo que hará que el color cambie nuevamente alupdateColor
.Aquí está el código actualizado para el servidor:
Este código define una función separada
updateActionButtonColor()
que verifica el valor deglobal$clicked
y actualiza el parámetrostyle
del botón en consecuencia. Esta función es llamada tanto cuandoinput$target_min_ab
cambia como cuando se presionainput$DartSearchAdv
.Nótese que utilizamos
updateActionButton()
en lugar deactionButton()
para modificar el estado del botón dinámicamente, lo cual asegura que el botón permanezca visible incluso cuando sus parámetros de estilo cambien.