[shiny] Module ui et server créés par la même fonction : absence de réactivité

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Bastien Gamboa
Messages : 151
Enregistré le : 13 Jan 2011, 21:31

[shiny] Module ui et server créés par la même fonction : absence de réactivité

Messagepar Bastien Gamboa » 15 Fév 2018, 10:19

Bonjour,

Je me lance enfin dans Shiny et je souhaite créer une fonction qui sera utilisée dans ui et dans server afin de créer un module shiny. Après de multiples essais je ne parviens pas faire fonctionner observeEvent() dans la partie server.
En faisant une fonction pour ui et une autre fonction pour server, je parviens à faire ce que je veux, mais je souhaiterai grouper les deux dans une seule et même fonction.

Voici le code reproductible explicitant mon problème :

Code : Tout sélectionner

require(shiny)
module <- function(id, where=c("server", "ui"), button, input, output, session) {
  result <- NULL
  ns <- NS(id)

  # UI part ---------------------------------------------------------------------
  if(where=="ui") {
    result <- tagList(
      tags$h4("Title"),
      textInput(ns("module_text"), label="Write text"),
      actionButton(ns("module_button"), label="Launch"),
      verbatimTextOutput(ns("module_verbatim"))
    )
  }

  # SERVER part -----------------------------------------------------------------
  if(where=="server") {
    result <- observeEvent(eventExpr=button(), handlerExpr={
      output$module_verbatim <-  input$module_text
      cat("verbatim updated")
    })
  }

  return(result)
}


ui <- fluidPage(
  tags$h1("Avant le module"),
  module(id="test", where="ui"),
  tags$h1("Après le module")
)

server <- function(input, output, session) {
  callModule(module, id="test", where="server", button=reactive(input$module_button))
}
shinyApp(ui, server)


Avec ce code, l'app marche mais lorsqu'on écrit quelque chose dans la zone de texte et qu'on clique sur le boutton, rien ne se passe alors que le verbatimTextOutput() devrait s'afficher ainsi que le cat().

Avez-vous des suggestions ?
N'hésitez pas à critiquer le code et/ou la logique, je n'ai pas encore comblé toutes mes lacunes en Shiny et toute aide est la bienvenue !

Merci,
Bastien

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: [shiny] Module ui et server créés par la même fonction : absence de réactivité

Messagepar Mickael Canouil » 16 Fév 2018, 14:56

Bonjour,

commencer par les modules n'est probablement pas la façon la plus simple d'appréhender Shiny et les concepts des environnements "reactifs".
J'ai l'impression que ce que vous souhaitez obtenir est simplement un changement dans l'interface engendré par un changement de votre champ de texte, si c'est bien ce genre de chose, je vous suggère de commencer simplement en vous inspirant des exemples sur le site rstudio (http://shiny.rstudio.com/gallery/), en particulier les sections "Dynamic user interface" et "Reactive programming".

Si vous tenez absolument à travailler avec les modules, je suggère que vous sépareriez dans un premier temps votre module en "server" et "ui" (http://shiny.rstudio.com/gallery/module-example.html, https://shiny.rstudio.com/articles/modules.html).

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité