最佳答案
我读了所有关于闪亮响应式编程的书。我有点糊涂了。下面的所有工作,但什么是首选的方法和为什么?显然,下面的例子很简单,但是当我使用任何一种方法创建一个更大的应用程序时,我会遇到麻烦吗?
我一直倾向于服务器代码 # 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)