使用 isolate() 停止响应
通常,只要读取一次响应式值,就会建立依赖关系;当该响应式值发生变化时,会导致调用它的表达式重新执行。isolate() 函数允许在不触发重新执行的情况下读取响应式值。
在本练习中,您将使用 isolate() 函数来阻断响应式传播。
本练习是课程的一部分
使用 R 构建 Shiny Web 应用
练习说明
- 更新服务器端代码,使文本输出只在用户更改身高或体重时更新,而不要因姓名的变化而更新。
交互式实操练习
通过完成这段示例代码来试试这个练习。
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)