本文介绍了R SHINY:服务器中同一renderUI的UI多用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要在UI的多个选项卡中重用用户在第一个选项卡中提供的输入。
在服务器中使用renderUI并在我的不同选项卡中使用uiOutput调用其输出似乎不可能做到这一点。以下是可重现的代码ui <- pageWithSidebar(
headerPanel("Hello !"),
sidebarPanel(
tabsetPanel(
tabPanel("a",
textInput(inputId = "xyz", label = "abc", value = "abc")),
tabPanel("b", uiOutput("v.xyz"))
,tabPanel("b", uiOutput("v.xyz"))
)
),
mainPanel())
server <- function(input,output){
output$v.xyz <- renderUI({
input$xyz
})
}
runApp(list(ui=ui,server=server))
有没有其他方法可以实现这一点?
非常感谢您的任何建议。
HTML
您不能(不应该)在推荐答案文档中有两个具有相同ID的元素(无论是否使用SHINY)。当然,在使用SHINY时,拥有多个具有相同ID的元素将是有问题的。我还主观地认为,您可以通过使用有意义的变量名来大幅改进代码。
您想要对此输入做什么也不是很清楚。是否希望在多个选项卡上显示输入框?还是要在多个选项卡上显示的textInput的值?
如果是前者,在我看来,没有一种明显的方法可以在不违反"具有相同ID的多个元素"子句的情况下做到这一点。后者会简单得多(只需使用renderText
并将其发送到verbatimOutput
),但我认为这不是您要问的问题。
所以您真正需要的是同步的多个文本输入(具有不同的ID)。您可以使用如下内容在服务器上的单独观察器中执行此操作:
ui <- pageWithSidebar(
headerPanel("Hello !"),
sidebarPanel(
tabsetPanel(
tabPanel("a",
textInput(inputId = "text1", label = "text1", value = "")),
tabPanel("b",
textInput(inputId = "text2", label = "text2", value = ""))
)
),
mainPanel()
)
INITIAL_VAL <- "Initial text"
server <- function(input,output, session){
# Track the current value of the textInputs. Otherwise, we'll pick up that
# the text inputs are initially empty and will start setting the other to be
# empty too, rather than setting the initial value we wanted.
cur_val <- ""
observe({
# This observer depends on text1 and updates text2 with any changes
if (cur_val != input$text1){
# Then we assume text2 hasn't yet been updated
updateTextInput(session, "text2", NULL, input$text1)
cur_val <<- input$text1
}
})
observe({
# This observer depends on text2 and updates text1 with any changes
if (cur_val != input$text2){
# Then we assume text2 hasn't yet been updated
updateTextInput(session, "text1", NULL, input$text2)
cur_val <<- input$text2
}
})
# Define the initial state of the text boxes
updateTextInput(session, "text1", NULL, INITIAL_VAL)
updateTextInput(session, "text2", NULL, INITIAL_VAL)
}
runApp(list(ui=ui,server=server))
可能有一种比我正在跟踪的cur_val
更清晰的方式来设置初始状态。但是我脑子里想不出什么,所以就是这样。 这篇关于R SHINY:服务器中同一renderUI的UI多用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!