- Notifications
You must be signed in to change notification settings - Fork 37
Open
Description
For another very likely useless example/hack, we can sort-of do server-side rendering in Shiny. In reality we already are doing this with the input mechanism, but in an attempt to make this more obvious, let's build a Shiny input that is simply a container in which we will hydrate and render what we receive from Shiny. In this case we will send json-ified htmltools:tags. These could also be real React components as well.
library(shiny) library(reactR) ui <- tagList( tags$script(HTML( " const ContainerInput = ({configuration, value, setValue }) =>{// hydrate and render value as children of this container // ignore value return React.createElement( 'div', configuration, value.map(function(x){return reactR.hydrate({}, x)}) ) }; reactR.reactShinyInput('.container', 'container', ContainerInput); " )), createReactShinyInput( inputId = "testcontainer", class = "container", dependencies = list(list()), # fake dependency since we will define in script configuration = list(), default = list() ) ) server <- function(input, output, session){observe({invalidateLater(1000, session) # send some tags as json in value to render in the container session$sendInputMessage( 'testcontainer', list( value = jsonlite::toJSON( list( tags$h1("server side (sort-of) rendered"), do.call(tags$ul,lapply(rnorm(10), function(x) tags$li(as.character(x)))) ), auto_unbox = TRUE, force = TRUE ) ) ) }) } shinyApp(ui, server) swbirchall
Metadata
Metadata
Assignees
Labels
No labels
