1
私はadd/removeBtnモジュールを使って "最初の"モジュールからUIを追加したり削除したりする単純なおもちゃの例を持っています。私は追加/削除がクリックされた回数を追跡する必要があります。モジュールを使用しない場合は簡単ですが、ネストされたモジュールのコンテキストでこれを実行しようとしています。コードは以下の通りですが、基本的には、メインサーバー機能のaddRmBtnServer()からの戻り値にアクセスできないようです。私はそれが簡単な修正であると確信していますが、私はこれを中心に多くの方法を試しましたが、addRmBtnServer()の呼び出し結果にアクセスできないようです。ありがとう!R Shiny:光沢のあるモジュールからリアクティブ値をマスターサーバーの機能に戻すにはどうすればいいですか?
library(shiny)
firstUI <- function(id) { uiOutput(NS(id, "first")) }
firstServer <- function(input, output, session, a) {
output$first <- renderUI({
selectInput(session$ns("select"), h4("Select"), paste0(isolate(a()),letters[1:4]))
})
}
removeFirstUI <- function(id) {
removeUI(selector = paste0('#', NS(id, "first")))
}
addRmBtnUI <- function(id) {
ns <- NS(id)
tags$div(
actionButton(inputId = ns('insertParamBtn'), label = "Add"),
actionButton(ns('removeParamBtn'), label = "Remove"),
hr(),
tags$div(id = ns('placeholder'))
)
}
addRmBtnServer <- function(input, output, session, moduleToReplicate, ...) {
ns = session$ns
params <- reactiveValues(btn = 0)
observeEvent(input$insertParamBtn, {
params$btn <- params$btn + 1
callModule(moduleToReplicate$server, id = params$btn, ...)
insertUI(
selector = paste0('#', ns('placeholder')),
ui = moduleToReplicate$ui(ns(params$btn))
)
})
observeEvent(input$removeParamBtn, {
moduleToReplicate$remover(ns(params$btn))
params$btn <- params$btn - 1
})
return(params$btn)
}
ui <- fluidPage(
addRmBtnUI("addRm"),
textInput("a", label = "a", value = 1, width = '150px'),
verbatimTextOutput("view", placeholder = TRUE)
)
server <- function(input, output, session) {
pars <- callModule(
addRmBtnServer, id = "addRm",
moduleToReplicate = list(
ui = firstUI,
server = firstServer,
remover = removeFirstUI
),
)
output$view <- renderText({ pars() })
}
shinyApp(ui = ui, server = server)
サーバ関数の戻り値を使用して、観測値(入力値)を渡すことができます。最初に 'fisrtServer'から' addRmBtnServer'へ、 'addRmBtnServer'から' server'へ渡します。私の答え[ここ](https://stackoverflow.com/questions/46555355/passing-data-within-shiny-modules-from-module-1-to-module-2/46555851#46555851)を参照してください。 –