r - R Shiny:删除新创建的标签
问题描述
我正在编写一个闪亮的应用程序,我希望用户能够在其中添加和删除选项卡。如果用户单击专门为此制作的选项卡,我知道如何添加选项卡(感谢此处的答案),但我不知道如何删除最后创建的选项卡。
这是一个可重现的示例:
library(shiny)
library(shinyWidgets)
ui <- navbarPage(position = "static-top",
title = "foo",
id = "tabs",
tabPanel(title = "Name 1",
fluidRow()),
tabPanel(title = "More",
icon = icon("plus"),
fluidRow()),
tabPanel(title = "Less",
icon = icon("minus"),
fluidRow())
)
server <- function(input, output) {
count <- reactiveVal(1)
observeEvent(input$tabs, {
if (input$tabs == "More"){
count(count()+1)
id = paste0("Name ", count())
insertTab(inputId = "tabs",
tabPanel(title = id,
fluidRow(column(
width = 12))
), target = "More", position = "before",
select = TRUE)}
if (input$tabs == "Less"){
count(count()+1)
id = paste0("Name ", count())
removeTab(inputId = "tabs",
target = id
)}
})
}
shinyApp(ui = ui, server = server)
在这里,您可以看到单击选项卡More
会添加一个选项卡,该选项卡以在选项卡Name i
上i
的点击次数命名More
。但是,单击选项卡Less
不会执行任何操作。
我想要的是以下内容:
如果用户至少单击一次
More
,则单击Less
会删除最后创建的选项卡(因此放置在之前More
)如果用户没有点击,
More
那么点击Less
什么也不做想象一下,我单击两次,
More
然后将有两个名为Name 2
和的附加选项卡Name 3
。单击Less
将删除Name 3
,但如果我再次单击More
,将再次调用附加选项卡Name 3
(因此单击Less
不应阻止重复使用已删除选项卡的名称)。
有人知道怎么做吗?
解决方案
我已经通过添加选择器并删除按钮然后重用选择器索引来完成此操作。为此,请使用每次按下单个按钮时计数的反应值或在交互完成时记录。
试试下面的代码:
library(shiny)
library(shinyWidgets)
ui <- navbarPage(position = "static-top",
title = "foo",
id = "tabs",
tabPanel(title = "Name 1",
fluidRow()),
tabPanel(title = "More",
icon = icon("plus"),
fluidRow()),
tabPanel(title = "Less",
icon = icon("minus"),
fluidRow())
)
server <- function(input, output) {
count <- reactiveValues(value = 1)
observeEvent(input$tabs, {
if (input$tabs == "More"){
count$value <- count$value + 1
id = paste0("Name ", count$value)
insertTab(inputId = "tabs",
tabPanel(title = id,
fluidRow(column(
width = 12))
), target = "More", position = "before",
select = TRUE)}
if (input$tabs == "Less"){
print(count$value)
id = paste0("Name ", count$value)
removeTab(inputId = "tabs",
target = id
)
count$value <- count$value -1
}
})
}
shinyApp(ui = ui, server = server)
推荐阅读
- c# - 尝试访问 swagger 端点时,将 Nswag 与 Odata 一起使用会产生错误
- javascript - 如何从 API 获取数据并使用 Chart.js 和 Angular 8 在其上创建图表?
- asp.net-core - 如何将消息发送到保存在 AspNetUsers 表信号 R 中的用户 ID
- python - 有没有办法动态使用星号表达式?
- r - 如何在 R 中使用带有循环的变异函数?
- java - 如何解决有关数据更改的空对象引用的此错误
- c# - 如何使用 Syncfusion PMML 从使用 sklearn MLPClassifier 训练的神经网络进行预测?
- java - 应用程序未使用 mvnDebug 在设置断点处停止
- oracle - 错误 00904 来自 PLSQL Select 语句 Oracle 中 WHERE 子句的标识符无效
- reactjs - 使用 React 排成一行的日历