【发布时间】:2020-07-14 05:06:42
【问题描述】:
我有一个应用程序可以与使用许多相同输入的选项卡面板一起使用,并且必须使用 renderUI 呈现以响应用户数据。我注意到我的调制输入优先考虑它们在其中呈现的第一个菜单,而忽略在不同面板中所做的更改
以下是基本问题的简化工作示例
library(shiny)
addexButtons <- function(id, label = "ROCParam") {
ns <- NS(id)
uiOutput(ns("roccondicionals"), label = label)
}
numbmod <- function(input, output, session, ndata) {
output$roccondicionals <- renderUI({
tagList(numericInput('numb', 'Choose Num', value = 0,))
})
}
ui <- fluidPage(navbarPage(
'App',
tabPanel(title = 'Menu 1',
sidebarLayout(
sidebarPanel(addexButtons("counter1", "Adder")),
mainPanel(textOutput('sumtotal'))
)),
tabPanel(title = 'Menu 2',
sidebarLayout(
sidebarPanel(addexButtons("counter2", "Multiplier"),),
mainPanel(textOutput('multiplytotal'))
))
))
server <- function(input, output) {
callModule(numbmod, "counter1")
callModule(numbmod, "counter2")
output$sumtotal <-
renderText(paste0('5 + ', input$numb, ' = ', input$numb + 5))
output$multiplytotal <-
renderText(paste0('5 x ', input$numb, ' = ', input$numb * 5))
}
shinyApp(ui = ui, server = server)
如果您运行此示例,您将看到,通过更改为菜单 2,该值将保留在菜单 1 中修改的信息(这是预期的)但是如果我选择在同一个选项卡中修改相同的值,我不能并且必须返回到菜单 1 才能这样做。
有没有办法能够在两个不同的选项卡上修改相同的渲染输入,其中最后一个修改是保留的?
【问题讨论】:
-
我认为您不能定义两个具有相同 ID 的数字输入。这就是您从菜单 2 页面输入的内容未被使用的原因。通过给它一个不同的ID,你可以编写一个逻辑来使用它。