首页 > 解决方案 > 如果包含在包中,Shinyjs 切换不起作用

问题描述

shinyjs::toggle在一个 R 脚本中使用过,我在同一个文件中有ui和函数。这种方式效果很好,但是一旦我在 2 个单独的文件(a和 a )中server使用完全相同的代码作为包的一部分,它就不再工作了。没有错误消息,该功能根本不会显示和隐藏我使用它的元素。ui.Rserver.R

我用下面的最小示例进行了尝试,结果相同。作为一个独立的 R 脚本,它可以工作,一旦我在一个包中使用相同的功能,它就不会。

library(shiny)
library(shinydashboard)
library(shinyjs)

ui <- dashboardPage(
 dashboardHeader(),
 dashboardSidebar(),
 dashboardBody(
   useShinyjs(),
   actionButton("button", "Click me"),
   div(id = "hello", "Hello!")
 )
)

server <- function(input, output) {
 observeEvent(input$button, {
   toggle("hello")
 })
}

shinyApp(ui, server)

在一个包中:

#' Shiny App UI
#'
#' @import shiny
#' @import shinydashboard
#' @import  shinyjs
#'
#'


uitest <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    useShinyjs(),
    actionButton("button", "Click me"),
    div(id = "hello", "Hello!")
  )
)


#' Shiny app server function
#'
#' @param input provided by shiny
#' @param output provided by shiny
#'



servertest <- function(input, output) {
  observeEvent(input$button, {
    toggle("hello")
  })
}

任何人都可以在这里帮助我吗?可能会出什么问题?

标签: rshinyshinyjs

解决方案


加载包时,UI 已经预先构建,并且不再触发脚本useShinyjs()中包含的功能。ui.R在我的包中,我创建了一个 launchApp 函数,它可以启动我的应用程序并useShinyjs()在启动应用程序之前调用它。所以我有 3 个单独的 R 文件ui.Rserver.RlaunchApp.R.

launchApp <- function() {

  shinyjs::useShinyjs()

  shinyApp(ui, server)

}

推荐阅读