R: Insert UI objects

insertUI {shiny} | R Documentation

## Insert UI objects

### Description

Insert a UI object into the app.

### Usage

    insertUI(selector, where = c("beforeBegin", "afterBegin", "beforeEnd",
      "afterEnd"), ui, multiple = FALSE, immediate = FALSE,
      session = getDefaultReactiveDomain())

### Arguments

`selector` | A string that is accepted by jQuery's selector (i.e. the string `s` to be placed in a `$(s)` jQuery call). This selector will determine the element(s) relative to which you want to insert your UI object.
`where` | Where your UI object should go relative to the selector: `beforeBegin` Before the selector element itself `afterBegin` Just inside the selector element, before its first child `beforeEnd` Just inside the selector element, after its last child (default) `afterEnd` After the selector element itself Adapted from here.
`ui` | The UI object you want to insert. This can be anything that you usually put inside your apps's `ui` function. If you're inserting multiple elements in one call, make sure to wrap them in either a `tagList()` or a `tags$div()` (the latter option has the advantage that you can give it an `id` to make it easier to reference or remove it later on). If you want to insert raw html, use `ui = HTML()`.
`multiple` | In case your selector matches more than one element, `multiple` determines whether Shiny should insert the UI object relative to all matched elements or just relative to the first matched element (default).
`immediate` | Whether the UI object should be immediately inserted into the app when you call `insertUI`, or whether Shiny should wait until all outputs have been updated and all observers have been run (default).
`session` | The shiny session within which to call `insertUI`.

### Details

This function allows you to dynamically add an arbitrarily large UI object into your app, whenever you want, as many times as you want. Unlike `renderUI`, the UI generated with `insertUI` is not updatable as a whole: once it's created, it stays there. Each new call to `insertUI` creates more UI objects, in addition to the ones already there (all independent from one another). To update a part of the UI (ex: an input object), you must use the appropriate `render` function or a customized `reactive` function. To remove any part of your UI, use `removeUI`.

### See Also

`removeUI`

### Examples

    ## Only run this example in interactive R sessions
    if (interactive()) {
    # Define UI
    ui <- fluidPage(
      actionButton("add", "Add UI")
    )

    # Server logic
    server <- function(input, output, session) {
      observeEvent(input$add, {
        insertUI(
          selector = "#add",
          where = "afterEnd",
          ui = textInput(paste0("txt", input$add),
                         "Insert some text")
        )
      })
    }

    # Complete app with UI and server components
    shinyApp(ui, server)
    }

[Package shiny version 1.1.0 Index]