CommencerCommencez gratuitement

Stopper les réactions avec isolate()

En temps normal, le simple fait de lire une valeur réactive suffit à établir une relation : toute modification de cette valeur réactive entraîne la réexécution de l’expression appelante. La fonction isolate() permet à une expression de lire une valeur réactive sans déclencher de réexécution lorsque cette valeur change.

Dans cet exercice, vous allez utiliser la fonction isolate() pour stopper le flux réactif.

Cet exercice fait partie du cours

<cours>Créer des applications web avec Shiny en R</cours>
Voir le cours

Instructions de l’exercice

  • Modifiez le code du serveur afin que la sortie texte ne se mette à jour que lorsque l’utilisateur change la taille ou le poids, et PAS le nom.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

ui <- fluidPage(
  titlePanel('BMI Calculator'),
  sidebarLayout(
    sidebarPanel(
      textInput('name', 'Enter your name'),
      numericInput('height', 'Enter your height (in m)', 1.5, 1, 2, step = 0.1),
      numericInput('weight', 'Enter your weight (in Kg)', 60, 45, 120)
    ),
    mainPanel(
      textOutput("bmi")
    )
  )
)

server <- function(input, output, session) {
  rval_bmi <- reactive({
    input$weight/(input$height^2)
  })
  output$bmi <- renderText({
    bmi <- rval_bmi()
    # MODIFY CODE BELOW: 
    # Use isolate to stop output from updating when name changes.
    paste("Hi", input$name, ". Your BMI is", round(bmi, 1))
  })
}

shinyApp(ui = ui, server = server)
Modifier et exécuter le code