shinyjs中的show()、hide()用法,Shiny

7
我有一个简化版本的shiny应用程序。我希望能够在单击“Frame1”的actionbutton时显示dataframe1,隐藏dataframe2,并在单击“Frame2”按钮时再次显示dataframe2并隐藏dataframe1。我需要将表格打印在同一位置上。感谢您的任何帮助和时间。
server.R
shinyServer(function(input, output, session) {

  data_for_use <- reactiveValues(d=NULL)

  observeEvent(input$actForFrame1,{
  data_for_use$dataFrame1 <- data.frame(firstColumn= c(1,3,5),secondColumn=c(2,4,6))})

  observeEvent(input$actForFrame2,{
  data_for_use$dataFrame2 <- data.frame(firstColumn= c(10,30,50),secondColumn=c(20,40,60))})

  output$dataFrame1 <- DT::renderDataTable({
    DT::datatable(data_for_use$dataFrame1)
  })

  output$dataFrame2 <- DT::renderDataTable({
    DT::datatable(data_for_use$dataFrame2)
  })

  observeEvent(input$actForFrame1,{
    show("dataFrame1")
    hide("dataFrame2")

  })

  observeEvent(input$actForFrame2,{
    show("dataFrame2")
    hide("dataFrame1")

  }) 
})

ui.R

library(shinyjs)
library(shiny)
library(DT)

shinyUI(pageWithSidebar(

  headerPanel("Test"),

  sidebarPanel(

    actionButton("actForFrame1", "Frame1"),
    actionButton("actForFrame2", "Frame2")
  ),

  mainPanel(
    useShinyjs(),
    wellPanel("Test",
              conditionalPanel(condition = "input.actForFrame1",
              DT::dataTableOutput("dataFrame1")
              ),
              conditionalPanel(condition= "input.actForFrame2",
              DT::dataTableOutput("dataFrame2"))
              )
  )
)
)

1
对我来说运行良好。您尝试过清除会话并确保没有加载其他软件包吗?shinyjs的show/hide仍然可以正常工作。 - DeanAttali
仅使用响应式值,未定义全局变量。 - Alperen Taciroglu
5
我唯一的猜测是可能有其他软件包定义了showhide函数。也许尝试调用 shinyjs::show()shinyjs::hide()。如果不行,那我就不知道了,你需要进一步调试。 - DeanAttali
调用顺序library(shinyjs)是否重要 - DTshiny是否掩盖了show/hide - SymbolixAU
@daattali - 我之前也是这样认为的,但是我好奇为什么我们需要显式地使用 shinyjs::show(),因为 show/hide 没有被 shinyDT 遮蔽。 - SymbolixAU
显示剩余4条评论
1个回答

8
原来,正如@Dean Attali友好地指出的那样,这些函数与其他包使用相同的命名空间,从而导致它们无法执行其功能。使用 shinyjs::show(); shinyjs::hide() 解决了这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接