【问题标题】:R Shiny - Spinner is displayed before clicking on actionbuttonR Shiny - 在点击动作按钮之前显示微调器
【发布时间】:2023-02-15 07:07:26
【问题描述】:

我想在单击 actionbutton 之后和显示 datatable 值之前显示一个微调器。

library(DT)
library(shiny)
library(shinycssloaders)


ui <- fluidPage(
  navbarPage("Query Tool",
             navbarMenu("Structures",
                        tabPanel("Structure Properties", fluid = TRUE,
                                 sidebarLayout(
                                   sidebarPanel(
                                     textInput("structure_id_properties", strong("Structure:"), value = ''),
                                     actionButton("run_properties", "Run Analysis", icon = icon("play"))),
                                   mainPanel(
                                     tabsetPanel(type = "tabs",
                                                 tabPanel("Data Table",br(), withSpinner(DTOutput("table_properties")))
                                     ))
                                 )))))


server <- function(input, output) {
  observeEvent(input$run_properties, {
    structure_id_properties <- "test"    
    output$table_properties <- renderDT ({data_output(sql_data)})
    output$query_properties <- renderText({properties_sql}) 
  })
}

我尝试了几个选项(renderUIoutput$table_properties &lt;- renderDT({NULL})...),但都没有成功。

【问题讨论】:

  • 如果有人试图运行您在此处提供的代码,它会运行吗?我已经添加了所需的库,但仍然不知道 data_outputsql_dataproperties_sqloutput$query_properties 是什么?请提供一个最小的可重现示例来展示您的问题:)
  • withSpinner 在重新计算输出时显示微调器动画。现在在DTOutput("table_properties") 中将没有数据,直到您单击该按钮,因此直到您单击该按钮,旋转动画将继续。这就是你面临这种行为的原因。

标签: r shiny spinner


【解决方案1】:

output$table_properties &lt;- renderDT({NULL}) 将不起作用,因为 withSpinner 将在 renderDT 未提供可呈现为数据表的 n 输出时准确显示。

这是一种方法。在这种情况下,表的数据不是在renderDT 内生成的,而是使用反应值来允许从服务器内的任何地方访问数据。

library(DT)
library(shiny)
library(shinycssloaders)


ui <- fluidPage(
  navbarPage("Query Tool",
             navbarMenu("Structures",
                        tabPanel("Structure Properties", fluid = TRUE,
                                 sidebarLayout(
                                   sidebarPanel(
                                     textInput("structure_id_properties", strong("Structure:"), value = ''),
                                     actionButton("run_properties", "Run Analysis", icon = icon("play"))),
                                   mainPanel(
                                     tabsetPanel(type = "tabs",
                                                 tabPanel("Data Table",
                                                          br(), 
                                                          withSpinner(DTOutput("table_properties")))
                                     ))
                                 )))))


server <- function(input, output) {
  data_output <- reactiveValues(sql_data = data.frame(test1 = character(), test2 = character(), test3 = integer()))
  
  observeEvent(input$run_properties, {
    data_output$sql_data <- NULL
    Sys.sleep(2.5) # for demo purposes
    data_output$sql_data <- data.frame(test1 = letters[1:5], test2 = LETTERS[1:5], test3 = 1:5)
  })
  output$table_properties <- renderDT ({req(data_output$sql_data)})
  
  output$query_properties <- renderText({properties_sql}) 
  
}

shinyApp(ui, server)

【讨论】:

    猜你喜欢
    • 2018-11-14
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 2019-08-01
    • 2022-01-15
    • 2016-12-26
    • 2018-03-04
    • 1970-01-01
    相关资源
    最近更新 更多