我正在创建一个闪亮的应用程序,这样当我单击“添加”或“删除”按钮时,多个反应性元素都会受到影响。我已经大大简化了我要在下面做的事情。基本上,我们并排获得了selectInput()和textInput()框,以便在textInput()框中填充用户选择的selectInput()框结果。然后,我有一个添加按钮和一个删除按钮,这样,通过单击添加按钮,在下一行的下方,我们可以并排获得新的selectInput()和textInput()框。如上所述,新行的textInput()框显示了新行的selectInput()框的用户选择结果。
我遇到的问题是能够引用新的seletInput()框的新值。使用get()引用不起作用,我需要一种迭代的方式来在添加和删除新框时引用这些值。如何成功调用对连续的selectInput()框的结果的引用?
suppressWarnings(library(shiny))
suppressWarnings(library(shinyFiles))
ui <- function(request) {
fluidPage(
fluidRow(
column(2,
uiOutput("ui1")
),
column(2,
uiOutput("ui2")
),
column(1,
actionButton(inputId = 'insertParamBtn', label = "Add Param")
),
column(1,
actionButton(inputId = 'removeParamBtn', label = "Remove Param")
)
),
tags$div(id = 'placeholder'),
hr(),
fluidRow(column(12, verbatimTextOutput("view", placeholder = T)))
)
}
server <- function(input, output, session) {
params <- reactiveValues(btn = 0)
output$ui1 <- renderUI({
selectInput("UI1", "First UI",
choices = thisList, selected = 1)
})
output$ui2 <- renderUI({
textInput("UI2", "Second UI", value = input$UI1, width …Run Code Online (Sandbox Code Playgroud) 我有一个简单的玩具示例,该示例使用add / removeBtn模块从“第一个”模块添加和删除UI。我需要跟踪单击添加/删除的次数。如果我不使用模块,这很容易,但是我正在尝试在嵌套模块的上下文中这样做。代码在下面,但是基本上,我似乎无法从主服务器函数中的addRmBtnServer()访问返回的内容。我确信这是一个简单的修复程序,但是我已经尝试了许多解决方法,但是似乎无法从对addRmBtnServer()的调用中访问结果。谢谢!
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 <- …Run Code Online (Sandbox Code Playgroud) 我创建了一个玩具示例,其中弹出一个textInput()框供用户输入任何字符串,然后通过单击添加按钮,弹出一个selectInput()框,并在字符串前加上字母a:d。换句话说,如果用户输入“ 1”,则通过单击“添加”按钮,将弹出一个selectInput()框,其中包含1a,1b,1c和1d作为选择。我正在使用一个用于添加/删除按钮功能的模块,该模块调用另一个模块来生成selectInput()框。主服务器函数调用添加/删除模块,该模块调用“第一个”模块,该模块生成selectInput()框。我将a()作为反应元素传递给添加/删除模块,该模块又将其传递给“第一个”模块。我只是在添加/删除模块和“ first”的功能签名中使用了“ ...”
这似乎可行,尽管a()在到达“第一个”模块时似乎并没有反应,这意味着如果我在“ a”框中键入其他字符串,我希望在selectInput()中进行选择)框进行动态更改,或者至少当我更改textInput()字符串并单击“添加”时,新的selectInput()应该反映更新后的textInput()字符串,但这不会发生。是什么会使selectInput()选项随着textInput()的变化而动态变化?下面的代码,谢谢!
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(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, { …Run Code Online (Sandbox Code Playgroud)