r - uiOutput 和 renderUI 不起作用(R Shiny)
问题描述
我正在尝试创建一个应用程序,它会创建一个简单actives$name
的字符串列表 (),并向我展示这些字符串。由于某种原因,它不起作用。这是代码:
library(shiny)
ui <- fluidPage(
sidebarLayout(
mainPanel(
textInput(inputId = "name", label = "Name", value = "foo"),
actionButton(inputId = "add", label = "Add")
),
sidebarPanel(
uiOutput("activeB")
)
),
)
server <- function(input, output, session) {
actives <- reactiveValues()
observeEvent(input$add,{
actives$name <- c(actives$name, input$name)
})
output$activeB <- renderUI({
for (i in 1:length(actives$name)) {
p("Name:")
verbatimTextOutput(actives$name[i])
print(actives$name[i])
}
})
}
shinyApp(ui = ui, server = server)
print()
我在循环中使用的显示for
了正确的结果,所以它“知道”我正在尝试做什么。它只是不输出它。我究竟做错了什么?
解决方案
有趣的一个。花了我几次去得到它。您需要将renderUI
输出包装在tagList
:
output$activeB <- renderUI({
tagList(HTML(paste(actives$name, collapse="<br>")))
})
两个观察:
- 您的演示代码永远不会起作用,因为您的调试
print
循环是 中的最后一条语句renderUI
,因此renderUI
永远不会返回任何内容。:( - 你知道不用
uiOutput
and也能得到同样的效果renderUI
,对吧?我假设您已经简化了实际用例以专注于问题 - 在这种情况下,谢谢!:)
完整代码:
library(shiny)
ui <- fluidPage(
sidebarLayout(
mainPanel(
textInput(inputId = "name", label = "Name", value = "foo"),
actionButton(inputId = "add", label = "Add")
),
sidebarPanel(
uiOutput("activeB")
)
)
)
server <- function(input, output, session) {
actives <- reactiveValues(
name=c()
)
observeEvent(input$add,{
actives$name <- c(actives$name, input$name)
})
output$activeB <- renderUI({
tagList(HTML(paste(actives$name, collapse="<br>")))
})
}
shinyApp(ui = ui, server = server)
推荐阅读
- xml - 如何使用 API 管理的 Set-body Policy 为 XML 元素设置值
- vb.net - 有没有办法基本上重新加载当前表单而不关闭它?
- html - 未正确记录 Flutter html 响应(可能是变量类型?问题?)
- c++ - 多个空成员优化中的相同碱基冲突
- c - 如何从 C 代码生成 MASM 格式的程序集
- regex - 正则表达式捕获每组分隔符之间的所有匹配项
- google-compute-engine - GCP 上的 CPU 软锁定 - Centos 上的 KVM
- android - React Native Hamburger onPress 问题
- powershell - 弹出通过usb连接的设备的powershell命令第一次不起作用
- java - 这是从其他类访问变量的正确方法吗?