使用操作按钮,我想将一些预设值加载到我闪亮的应用程序的UI元素中,然后触发更新的UI的输出。在下面的应用程序中有两个按钮。 Print
会将输入$ 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
?
答案 0 :(得分:0)
据我所知,如果你让所有UI元素都依赖于输入$ 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)