Приложение ниже содержит два selectInput
s, letter
и state
(содержит сокращенные названия штатов США). Существует также uiOutput
, который отображает полное название штата input$state
ниже состояния selectInput
. Вот так:
Мне бы хотелось, чтобы полное имя штата отображалось только в случае input$letter == b
. Для этого я добавляю следующее в мой renderUI
вызов: req(isolate(input$letter) == 'b')
. Однако это приводит к тому, что renderUI
никогда больше не будет выполняться, даже если пользователь изменит input$state
и input$letter == b
. Ничего не отображается:
На приведенном выше снимке экрана я ожидал, что текст 'имя штата: Калифорния' будет отображаться, поскольку renderUI
по-прежнему принимает зависимость от значения 'state', так что изменение в input$state
должно привести к повторному выполнению выражения в renderUI
. Так почему же выделение значения буква с помощью isolate(input$letter)
меняет это поведение?
Вот код для воспроизведения вышеприведенного:
library(shiny)
shinyApp(
ui = fluidPage(
selectInput('letter', 'letter', letters),
selectInput('state', 'state abbreviation', state.abb),
uiOutput('state_full')
),
server = function(input, output, session) {
output$state_full <- renderUI({
# req(isolate(input$letter) == 'b')
paste('state name:', state.name[which(state.abb == input$state)])
})
}
)