闪亮的submitButton无法正常工作

时间:2016-04-06 20:26:28

标签: r shiny

刚开始学习Shiny。我尝试构建一个简单的非反应式应用程序,用户单击按钮,随机向量将打印到屏幕上。但是,我无法使用提交按钮。

# Load required files
lapply(c("data.table", "shiny"), require, character.only=T)

#=================================================================
# Define UI for application that draws a histogram

ui <- shinyUI(fluidPage(

   # Application title
   titlePanel("App-4"),

   # Sidebar
   sidebarLayout(
      sidebarPanel(
        submitButton("Submit")
      ),

      # Print the data
      mainPanel(
        textOutput("myTable")
      )
   )
))

#=================================================================
# Define server logic

server <- shinyServer(function(input, output) {
   output$myTable <- renderPrint({
     sample(10)
   })
})

#=================================================================

# Run the application 
shinyApp(ui = ui, server = server)

我做错了什么?我能够使用actionButton来解决此问题,但我想了解上述代码无法正常工作的原因。感谢。

1 个答案:

答案 0 :(得分:2)

这是一个非常简单的演示。单击该按钮时,它将生成一个包含100个随机数的新直方图。

submitButton旨在与输入表单一起使用,并不适用于您的要求。例如,如果您有四个不同的输入,并且您希望仅在单击提交按钮时更改输出,而不是在单个输入更改时。

在Shiny中,输出变化是由事件链引起的。您的输出需要依赖于一个或多个输入才能更改。现在,您的输出(服务器代码)不依赖于任何输入,因此不会发生任何事情。请阅读此处以获得非常详细的解释。 http://shiny.rstudio.com/articles/reactivity-overview.html

library(shiny)

# Define UI for application that draws a histogram
ui <- shinyUI(fluidPage(

   # Application title
   titlePanel("Button demo"),

   # Sidebar with a button
   sidebarLayout(
      sidebarPanel(
        actionButton("button", "Click me to get a new histogram")
      ),

      # Show a plot of the generated distribution
      mainPanel(
         plotOutput("distPlot")
      )
   )
))

# Define server logic required to draw a histogram
server <- shinyServer(function(input, output) {

  observeEvent(input$button, {
    output$distPlot <- renderPlot({
      hist(rnorm(100))
    })
  })
})

# Run the application 
shinyApp(ui = ui, server = server)