r语言 - 将reactive()与reactiveValues()结合使用而不是observeEvent()是否不正确?&l



我正在寻找一些帮助理解闪亮的反应性-我的非常基本的例子工作,但我有一种感觉,这是不正确的方式去做事情。我已经通读了这里的例子,它解释了observereactive的不同行为。但在我的例子中,我把它们结合使用了——我想知道如果和为什么,那是我不应该做的事情!

我的方法-这是不正确的吗?

我已经捕获了模块中动作按钮的反应值(见下面的完整代码),并使用reactive()将其分配给我的reactiveValues列表。

navigation_values <- reactiveValues()
navigation_values$button1 = reactive(input$navigate)

这个反应列表然后返回到应用服务器,然后我使用navigation_values$button1()访问值。这是有效的(对于这个小例子)-但与所有闪亮的文档/小插图不同,我看到的是…

observeEvent(input$navigate, {
navigation_values$button1 = input$navigate
})

然后是通过navigation_values$button1访问的值

感谢任何帮助!我不确定这是否是一个"哲学"问题。问题,或者如果我将我的方法扩展到一个更彻底的例子,是否会立即导致问题。

完整代码

library(shiny)
library(shinydashboard)
# update values module -------------------------------------
module_ui <- function(id){
ns <- NS(id)
tagList(
actionButton(inputId = ns("navigate"),
label = "Go to page 2")
)
}
module_server <- function(id){

moduleServer(id, function(input, output, session){
navigation_values <- reactiveValues()
navigation_values$button1 = reactive(input$navigate)

return(navigation_values)

})
}
# UI  --------------------------------------------
sidebar <- dashboardSidebar(
sidebarMenu(
id = "mastertabs",
menuItem(
text = "Page 1",
tabName = "page1"),
menuItem(
text = "Page 2",
tabName = "page2")))
body <- dashboardBody(
tabItems(
tabItem(
tabName = "page1",
fluidPage(module_ui("mymodule"))
)))
ui <- dashboardPage(
dashboardHeader(title = "PRACTICE"),
sidebar,
body
)
# Server ------------------------
server <- function(input, output, session){

navigation_values <- module_server("mymodule")

observeEvent(navigation_values$button1(), {
updateTabsetPanel(session, inputId = "mastertabs", selected = "page2")
})
}
shinyApp(ui = ui, server = server)

我认为最好的方法是:

moduleServer(id, function(input, output, session){
return(reactive(input$navigate)
})

然后,在你的应用程序中,只需调用:

navigation_values()

相关内容

  • 没有找到相关文章

最新更新