我想知道是否有可能使UI适应,但是从数据集而不是用户输入。 我已经看到了insertUI(https://shiny.rstudio.com/reference/shiny/latest/insertUI.html)的示例,但它在我的情况下不起作用,因为它不属于被动事件。
我收到了这个错误:
.getReactiveEnvironment()$ currentContext()中的错误: 没有活动的反应上下文,不允许操作。 (你试图做>只能在反应式表达式或观察者内部完成的事情。)
这是我的服务器.R代码:
i = 2017
while(TRUE){
if(file.exists(paste("Challenge_adultes_",i, ".xlsx",sep=""))){
insertUI(
selector = "#add",
where = "afterEnd",
ui = textInput(paste0("txt", input$add),
"Insert some text")
)
i = i+1
}else{
break
}
}
我的用户界面:
navbarPage("xxx",
actionButton("add", "Add UI")
)
那么,是否可以在没有用户输入的情况下使用insertUI创建动态UI? 谢谢你的阅读。
正如所提出的,一个完全可再现的例子:
library(shiny)
if (interactive()) {
ui <- fluidPage(
navbarPage("xxx",
actionButton("add", "Add UI")
)
)
server <- function(input, output, session) {
insertUI(
selector = "#add",
where = "afterEnd",
ui = textInput(paste0("txt", input$add),
"Insert some text")
)
}
shinyApp(ui, server)
}
答案 0 :(得分:0)
该错误消息的关键部分是:
你试图做一些只能在内部完成的事情 反应性表达或观察者
您需要将insertUI()函数放在反应函数中。 observe()函数就像observeEvent(),但它不是直接触发器,只要它的依赖关系发生变化就会重新执行。因此,如果您将可更改数据置于反应值中,那么无论何时更改它都将重新运行observe()函数内的代码。
Mapper:scan