繁体   English   中英

标题中的R Shiny动态文本(反应式renderUI)

[英]R Shiny Dynamic text in header (reactive renderUI)

我试图将动态文本放在闪亮的标题中,并设法将文本放入其中,但在从反应式表达式接收到新数据后无法更新它。 要将文本放在标题中,我使用了一个基本的Java调用, 标记为$ script

我担心的是renderUI只渲染第一次,并且每当更新无功值(val)时都不会强制渲染,这正是我所需要的。

对于下面这个奇怪的例子,我有一个巨大的仪表板,它有几个链式依赖,我试图在下面的可重现的例子中复制依赖类型。

library(shiny)
library(shinydashboard)

ui <- fluidPage(
    dashboardPage(skin = 'black',
                  dashboardHeader(title = "test"),
                  dashboardSidebar(
                      sidebarMenu(id = 'MenuTabs',
                                  menuItem("dummy", tabName = "rawanalysis", selected = TRUE, icon = icon("dashboard"))
                      )
                  ),
    dashboardBody(
        uiOutput(outputId = 'Header'),
        fluidRow(
            box(
                actionButton("change", "Change")
            )
    ))))


server <- function(input, output) {

    Go_rv <- reactiveValues(val = 0)
    observeEvent(input$change, {

        sam <- rnorm(1)

        if(sam > 0){
            Go_rv$val <- TRUE
        } else {
            Go_rv$val <- FALSE
        }

    })

    val <- reactive({
        print(Go_rv$val)
        if(Go_rv$val){

            out <- 0
        } else {
            out <- -5
        }    

        return(out)


    })

    output$Header <- renderUI({

        removeUI(
            selector = "div:has(> #Header)"
        )

        header_text <- paste0('$(document).ready(function() {
                              $("header").find("nav").append(\'<div class="myClass">', val(), '</div>\');})')

        tags$script(HTML(header_text),
                    id = 'Header'
        )
    })

}

shinyApp(ui = ui, server = server)

基本上, observeEventreactive文本输出应该完成这项工作!

library(shiny)
library(shinydashboard)

ui <- fluidPage(
  dashboardPage(skin = 'black',
                dashboardHeader(title = textOutput('test')),
                dashboardSidebar(
                  sidebarMenu(id = 'MenuTabs',
                              menuItem("dummy", tabName = "rawanalysis", selected = TRUE, icon = icon("dashboard"))
                  )
                ),
                dashboardBody(
                  #uiOutput(outputId = 'Header'),
                  fluidRow(
                    box(
                      actionButton("change", "Change")
                    )
                  ))))


server <- function(input, output,session) {


  title_change <- reactive({
    input$change
    as.character(Sys.time())
  })


observeEvent(input$change, { output$test <- renderText({ title_change()

})
})


}

shinyApp(ui = ui, server = server)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM