Shiny 模块间通信

想实现在页面1上点击按钮,跳转到页面2,每个页面作为一个module。

错误的写法:

模块之间的变量不共享,无法达到预期目的。
app.R

library(shiny)

source("page1.R")
source("page2.R")

ui <- navbarPage(
  title = "test",
  id = "test",
  ui.page1(0),
  ui.page2(0)
)

server <- function(input, output, session) {
  s1 <- server.page1(0)
}
shinyApp(ui = ui, server = server)

page1.R

ui.page1 <- function(id) {
  ns <- NS(id)
  tabPanel(
    title = "page1",
    value ="page1",
    actionButton(inputId = ns("jt2"),label = "Jump to page 2")
  )}

server.page1 <-  function(id) {
  moduleServer(id,function(input, output, session) {
    observeEvent(input$jt2, {
      updateNavbarPage(session, inputId = "test", selected = "page2")
    }
    )
    }
    )
  }

page2.R

ui.page2 <- function(id) {
  ns <- NS(id)
  tabPanel(
    title = "page2",
    value = "page2",
    tags$h1("Here is page 2.")
  )}

正确写法

app.R

library(shiny)

source("page1.R")
source("page2.R")

ui <- navbarPage(
  title = "test",
  id = "test",
  ui.page1(0),
  ui.page2(0)
)

server <- function(input, output, session) {
  s1 <- server.page1(0)
  observeEvent(s1$jt2(), {
    updateNavbarPage(session, inputId = "test", selected = "page2")
  })
}

shinyApp(ui = ui, server = server)

page1.R

ui.page1 <- function(id) {
  ns <- NS(id)
  tabPanel(
    title = "page1",
    value = "page1",
    actionButton(inputId = ns("jt2"),label = "Jump to page 2")
    )}

server.page1 <-  function(id) {
  moduleServer(id,module = function(input, output, session) {
    return(list(jt2 = reactive({input$jt2})))
  }
  )
  }

page2

ui.page2 <- function(id) {
  ns <- NS(id)
  tabPanel(
    title = "page2",
    value = "page2",
    tags$h1("Here is page 2.")
    )}

当然我这个navbarPage直接点击上面导航栏就可以跳转,做按钮是多余的,只是为了示例。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 14,096评论 2 59
  • 随着项目规模的不断扩大,为了更好的进行协作开发,提高开发效率,必须对项目进行改造以支持模块化、插件化。在对项目进行...
    白羽驰阅读 8,175评论 0 14
  • 随着纯客户端到Hybrid技术,到RN&Weex,再到如今的Flutter技术,客户端实现技术不断前进。 在之前的...
    瑜小贤阅读 643评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,889评论 28 54
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,391评论 4 8

友情链接更多精彩内容