r - 强制渲染已经计算的 react 元素

标签 r shiny

我正在尝试构建一个 Shiny 的应用程序,通过不同的 render* 函数输出多个结果。

问题是这些结果之一需要一些时间来计算。所以我希望shiny尽快呈现快速的结果。

这是一些代码来说明

# ui.R
library(shiny)

shinyUI(fluidPage(
    textOutput("res1"),
    textOutput('res2')
))

# server.R
library(shiny)

shinyServer(function(input, output) {

    output$res1 = renderText({
        "shows up instantly"
    })

    output$res2 = renderText({
            Sys.sleep(3)
            "shows up after 3 sec"
    })
})

目前,网页保持空白 3 秒,两个元素同时呈现。

我的问题是以下一个:是否可以强制执行 output$res1output$res2 之前执行并且在长计算开始之前将结果发送到浏览器?

最佳答案

退房 invalidateLater否则,如果您只想渲染文本,您可以使用以下命令直接向客户端发送文本:

# ui.R
library(shiny)

ui <- shinyUI(fluidPage(
  tags$head(
    tags$script(
      HTML("
            Shiny.addCustomMessageHandler ('print',function (message) {
              $('#'+message.selector).html(message.html);
              console.log(message);
            });
           ")
    )
  ),
  textOutput("res1"),
  textOutput('res2')
))

# server.R
server <- shinyServer(function(input, output, session) {
  session$sendCustomMessage(type = 'print', message = list(selector = 'res1', html = "shows up instantly"))
  Sys.sleep(3)
  session$sendCustomMessage(type = 'print', message = list(selector = 'res2', html = "shows up after 3 sec"))
})

shinyApp(ui = ui, server = server)

关于r - 强制渲染已经计算的 react 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33241733/

相关文章:

r - 计算汇总统计数据,然后将所有结果合并到单个 data.frame 中

r - 如何列出我的全局环境中的所有数据框?

html - 是否可以在 Shiny downloadHandler 生成的报告中使用 HTML

javascript - 修复了shiny的slideInput中的多个值

r - 森林 : error in predict when newdata is one-row dataframe

r - 如何标记对角矩阵中的行和列?

mysql - dbConnect-R中的清理数据是否会改变真实数据库中的数据值

r - 在 Shiny 中限制 DT 表中的行选择

R Shiny : create non-reactive background in plotOutput

shiny - 如何在 Shiny 中创建和显示动画 GIF?