Я прочитал все, что я могу о блестящем реактивном программировании. Я немного смущен. Следующие все работают, но какой метод предпочтительнее и почему? Очевидно, что приведенный ниже пример прост, но столкнусь ли я с проблемами при создании более крупного приложения любым из методов?
Я склоняюсь к стилю в коде сервера # 1. Причина в том, что я могу разбить заявления if. Мне это кажется гораздо более читабельным. Опять же, простые примеры, приведенные ниже, не очень сложны, но вы можете легко представить, как серверный код 2 и серверный код 3 могут очень запутаться с множеством вложенных операторов if/if else.
Код интерфейса
library(shiny)
ui <- fluidPage(
selectInput(inputId = 'choice',
label = 'Choice',
choice = c('Hello','Goodbye'),
selected = c('Hello')
),
textOutput('result')
)
Код сервера 1
server <- function(input,output,session)({
text <- reactiveValues()
observe({
if (input$choice == 'Hello') {
text$result <- 'Hi there'
}
})
observe({
if (input$choice == 'Goodbye') {
text$result <- 'See you later'
}
})
output$result <- renderText({
text$result
})
})
shinyApp(ui = ui, server = server)
Код сервера 2
server <- function(input,output,session)({
getStatus <- reactive({
if (input$choice == 'Hello') {
'Hi there'
} else if (input$choice == 'Goodbye'){
'See you later'
}
})
output$result <- renderText({
getStatus()
})
})
shinyApp(ui = ui, server = server)
Код сервера 3
server <- function(input,output,session)({
text <- reactiveValues()
observeEvent(input$choice,{
if (input$choice == 'Hello') {
text$result <- 'Hi there'
} else if (input$choice == 'Goodbye') {
text$result <- 'See you later'
}
})
output$result <- renderText({
text$result
})
})
shinyApp(ui = ui, server = server)