R 在一个闪亮的应用程序中,If语句连续两次不起作用

R 在一个闪亮的应用程序中,If语句连续两次不起作用,r,shiny,dt,R,Shiny,Dt,我有一个闪亮的应用程序,显示3个标签 在文档选项卡中有一个表。当用户单击第一行的setosa时,他将移动到视图选项卡(仅在单击时可见),并看到一个表。当用户单击第二行的setosa时,他将移动到视图选项卡并看到另一个表。此外,这些表必须仅在视图选项卡上可见 该应用程序似乎工作正常,但如果我单击第一行setosa,移动到视图选项卡,再次返回文档选项卡,然后再次尝试单击第一行setosa,则不会发生任何事情。我必须单击第二行setosa使其再次工作。第二行的setosa也会发生同样的情况 简单地说,

我有一个闪亮的应用程序,显示3个标签

文档
选项卡中有一个表。当用户单击第一行的
setosa
时,他将移动到
视图
选项卡(仅在单击时可见),并看到一个表。当用户单击第二行的
setosa
时,他将移动到
视图
选项卡并看到另一个表。此外,这些表必须仅在
视图
选项卡上可见

该应用程序似乎工作正常,但如果我单击第一行
setosa
,移动到
视图
选项卡,再次返回
文档
选项卡,然后再次尝试单击第一行
setosa
,则不会发生任何事情。我必须单击第二行
setosa
使其再次工作。第二行的setosa也会发生同样的情况

简单地说,我不能连续两次执行相同的操作,我觉得是我的
if
条件造成的

library(shiny)
library(shinydashboard)
library(shinyWidgets)
library(shinydashboardPlus)
library(DT)
library(shinyjs)

shinyApp(
  ui = dashboardPagePlus(
    header = dashboardHeaderPlus(title = span(strong("ArmorDoc"),style = "color: black;")

    ),
    sidebar = dashboardSidebar(

    ),
    body = dashboardBody(

      useShinyjs(),
      tags$hr(),
      tabsetPanel(
        id ="tabA",
        type = "tabs",
        tabPanel("Documents",icon = icon("accusoft"),
                 tags$hr(),
                 DTOutput("dt1")),
        tabPanel("View", icon = icon("table"),
                 DTOutput("dt3")
        ),
        tabPanel("Upload", icon = icon("table")

        )

      )

    )),
  server = function(input, output,session) {
    observeEvent(input$tabA, {
      if(input$tabA == "Documents"|input$tabA=="Upload"){
        hideTab("tabA", "View")
      }
    })



    observeEvent(input$dt1_cell_clicked, {
      # alternative: input$dt1_cells_selected
      if (req(input$dt1_cell_clicked$value) == "setosa") {
        showTab("tabA", "View")
        updateTabsetPanel(session, inputId = "tabA", selected = "View")
      }
    })

    output$dt1 <- DT::renderDataTable({
      DT::datatable(
        iris[1:2,],
        filter = "top",
        options = list(searchHighlight = TRUE, search = list(search = ""),pageLength = 5,columnDefs = list(list(className = 'dt-left', targets = "_all"))),rownames= FALSE,
        selection = list(mode = 'single', target = 'cell')
      ) 

    })


    output$dt3 <- renderDT(server = F,
                           if(input$dt1_cell_clicked$row == 1&input$tabA=="View"){

                             datatable(iris)
                           }
                           else if(input$dt1_cell_clicked$row == 2&input$tabA=="View"){
                             datatable(mtcars)
                           }
                           else{
                             return(NULL)
                           }
    )


  }
)
库(闪亮)
图书馆(shinydashboard)
图书馆(shinyWidgets)
图书馆(shinydashboardPlus)
图书馆(DT)
图书馆(shinyjs)
shinyApp(
ui=仪表板PagePlus(
页眉=仪表板页眉(title=span(strong(“ArmorDoc”),style=“color:black;”)
),
侧栏=仪表板侧栏(
),
车身=仪表板车身(
useShinyjs(),
标记$hr(),
选项卡面板(
id=“tabA”,
type=“tabs”,
选项卡面板(“文档”,图标=图标(“accusoft”),
标记$hr(),
数据输出(“dt1”),
选项卡面板(“视图”,图标=图标(“表格”),
dt3输出(“dt3”)
),
选项卡面板(“上传”,图标=图标(“表格”)
)
)
)),
服务器=功能(输入、输出、会话){
ObserveeEvent(输入$tabA{
如果(输入$tabA==“文档”|输入$tabA==“上传”){
hideTab(“tabA”、“视图”)
}
})
ObserveeEvent(输入$dt1\u单元格\u单击{
#备选方案:输入选定的$dt1\u单元格
如果(req(输入$dt1\u单元格\u单击$value)=“setosa”){
显示选项卡(“选项卡”、“视图”)
UpdateAbsetPanel(会话,inputId=“tabA”,selected=“View”)
}
})
可以找到输出$dt1答案。它与
observeEvent()
答案中的
Proxy
方法相同。它与
observeEvent()中的
Proxy
方法相同