【问题标题】:Reactivity order of Shiny UI elementsShiny UI 元素的反应顺序
【发布时间】:2016-10-15 15:38:27
【问题描述】:

使用操作按钮,我想将一些预设值加载到我闪亮的应用程序的 UI 元素中,然后触发更新后的 UI 的输出。在下面的应用程序中有两个按钮。 Print 会将 input$txt 中的任何内容打印到输出中。 preset 按钮应使用预设值更新 UI 元素,然后将此值打印到输出。所需功能相当于按preset,然后按print

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      textInput('txt','Text',value = ''),
      actionButton('print','Print'),
      actionButton('preset','preset')
    ),
    mainPanel(
      verbatimTextOutput("outText")
    )))

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

  values <- reactiveValues(text='')

  observeEvent(input$print,{
    values$text <- input$txt
  })
  observeEvent(input$preset,{
    presetVal <-'Some preset value'
    session$sendInputMessage('txt', list(value = presetVal))
  })

  output$outText <- renderPrint({
    print(values$text)
  })

}

shinyApp(ui, server) 

那么为什么不这样做呢?

  observeEvent(input$preset,{
    presetVal <-'Some preset value'
    session$sendInputMessage('txt', list(value = presetVal))
    values$text <- presetVal
  })

我的应用程序有很多动态 UI 元素和模块化过滤器,其结果是在输出中使用的过滤数据框。所以为了得到正确的过滤数据框,UI元素本身需要在创建输出之前刷新。如果这是有道理的。那么是否可以模拟按preset 后跟print 的动作?

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    据我所知,如果您让所有 UI 元素都依赖于 input$preset,那么一旦按下 preset,它们就会全部刷新。

    图书馆(闪亮)

    ui <- fluidPage(
      sidebarLayout(
        sidebarPanel(
          textInput('txt','Text',value = ''),
          actionButton('print','Print'),
          actionButton('preset','preset'),
          uiOutput('myOutput')
        ),
        mainPanel(
          verbatimTextOutput("outText")
        )))
    
    server <- function(input, output,session) {
    
      # default counter just for demonstration of dependency on preset button
      default <<- 0
    
      output$myOutput <- renderUI({
    
        input$preset # to introduce dependency on preset button
    
        default <<- default + 1
    
        textInput('myText', '', value = default)
      })
    
      values <- reactiveValues(text='')
    
      observeEvent(input$print,{
        values$text <- input$txt
      })
      observeEvent(input$preset,{
        presetVal <-'Some preset value'
        session$sendInputMessage('txt', list(value = presetVal))
        values$text <- presetVal
      })
    
      output$outText <- renderPrint({
        print(values$text)
      })
    
    }
    
    shinyApp(ui, server) 
    

    【讨论】:

      猜你喜欢
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 2011-12-18
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多