如何使 UI 元素在加载时呈现,但随后依赖于按钮进行进一步更新

Posted

技术标签:

【中文标题】如何使 UI 元素在加载时呈现,但随后依赖于按钮进行进一步更新【英文标题】:How to make a UI element render on load but then dependent on a button for further updates 【发布时间】:2022-01-23 18:27:27 【问题描述】:

我正在尝试使 ui 部分反应,因为当应用程序首次加载时,会计算结果,但任何进一步的更新只能通过触发操作按钮来进行。 例如在下面的应用程序中, 应用加载时,input1 的值(4%)乘以 400,结果显示为文本输出。 现在对 input1 的任何进一步更新都不应该更新 textOutput,直到按下更新按钮。 我相信反应式在这里使用是错误的,所以我非常感谢这方面的指导。谢谢

library(shiny)
library(shinyWidgets)
ui <- fluidPage(
  fluidRow(
    autonumericInput(
    inputId = "input1", label = "Percent Input", 
    value = 4, currencySymbol = " %",currencySymbolPlacement = "s",
    digitGroupSeparator = ",",decimalPlaces = 2),
    actionButton(inputId = "submit1", label = "Update"),
    verbatimTextOutput("resultUI")
  )
)

server <- function(input, output) 
  result<-reactive(
    400*input$input1/100
  )
  output$resultUI <- renderText( result() )


shinyApp(ui = ui, server = server)

【问题讨论】:

【参考方案1】:

您可以将eventReactiveignoreNULL=FALSE 一起使用,这样它也会在加载时触发:

library(shiny)
library(shinyWidgets)

ui <- fluidPage(
  fluidRow(
    autonumericInput(
      inputId = "input1", label = "Percent Input", 
      value = 4, currencySymbol = " %",currencySymbolPlacement = "s",
      digitGroupSeparator = ",",decimalPlaces = 2),
    actionButton(inputId = "submit1", label = "Update"),
    verbatimTextOutput("resultUI")
  )
)

server <- function(input, output) 
  result<-eventReactive(input$submit1,
    400*input$input1/100
  ,ignoreNULL = FALSE)
  
  output$resultUI <- renderText( result() )


shinyApp(ui = ui, server = server)

【讨论】:

您好 Waldi,我遵循了您的方法,它非常适用于静态元素,但似乎无法使其适用于动态 ui 元素,例如表格。你能看看这个吗? ***.com/questions/70835628/…

以上是关于如何使 UI 元素在加载时呈现,但随后依赖于按钮进行进一步更新的主要内容,如果未能解决你的问题,请参考以下文章

使 conditionalPanel 依赖于使用 fileInput 上传的文件

如何使用 props 访问不同的组件

当用户关闭屏幕android时,使应用程序正常工作

使用 Semantic UI React 加载屏幕

如何滚动到通过 react-virtualized 呈现的 React 元素?

如何专注于打开和模态的触发元素,一旦保存内容,整个页面就会被销毁并再次呈现