2

I think I am missing something very simple.

I want my user to click on action button 1 so that action button 2 appears. But how can I 'render' a new action button in ui?

My code is below. Thank you very much!

library(shiny)
ui = shinyUI(fluidPage(
  sidebarLayout(
    sidebarPanel(
      actionButton("button1", label = "Press Button 1")
    ),
    mainPanel(
      # what should I write here?
      #renderPrint("button2")
    )
  )
))

server = shinyServer(function(input, output, session) {
  observeEvent(input$button1, {
    output$button2 <- renderUI({
      actionButton("button2", label = "Press Button 2")
    })
  })
})
shinyApp(ui = ui, server = server)
user3245256
  • 1,842
  • 4
  • 24
  • 51

1 Answers1

5

If you use renderUI() on server side, you have to use uiOutput() on the ui side.

Full code reads:

library(shiny)
ui = shinyUI(fluidPage(
  sidebarLayout(
    sidebarPanel(
      actionButton("button1", label = "Press Button 1")
    ),
    mainPanel(
      # what should I write here?
      uiOutput("button2")
    )
  )
))

server = shinyServer(function(input, output, session) {
  observeEvent(input$button1, {
    output$button2 <- renderUI({
      actionButton("button2", label = "Press Button 2")
    })
  })
})
shinyApp(ui = ui, server = server)
Tonio Liebrand
  • 17,189
  • 4
  • 39
  • 59
  • That's it! Thank you very much! – user3245256 Apr 03 '19 at 20:53
  • A quick question - how can I refer to button2 going forward (e.g., to produce observeEvent dependent on button2? Can I still say: observeEvent(input$button2 ...? Or should I refer to it differently? – user3245256 Apr 03 '19 at 21:36
  • @user3245256 have you ever found out how to refer to button2? I ran into a similar problem. ObserveEvent of this button 2 does nothing. No clue how to solve it. – rdatasculptor May 15 '23 at 20:14