r语言 - 选择第一个选项时updatePickerInput()的问题



在我的Shiny应用程序中创建具有CRUD功能的表单时,我遇到了一种情况,当我使用updatePickerInput函数时,它在选择第一个输入时无法正常工作。

我已经创建了一个可重复的示例应用程序,显示这个问题。第一个代码块是正确工作的应用程序(使用命名列表中的第二个选定项目),第二个代码块具有列表中的第一个命名项目,并且此不起作用正确。这两个应用程序的区别在于变量& selected_var"已定义(代码块结束)。

要重现该问题,需要执行以下步骤:

  1. 在下拉菜单中选择"资产类型#1">
  2. 点击按钮。
  3. 正确的结果是它应该更新选择器中的选定项。在第一个例子中,这是"资产类型#2",在第二个例子中,这应该是"资产类型#1"。

#2可以,#1不行。

对于如何解决这个问题有什么想法吗?

正确的示例:

library(shiny)
library(shinyWidgets)
# Define options
# Define UI
ui <- fluidPage(
uiOutput("pickerInput"),
actionButton(inputId = "update_button", label = "Update selected option")
)
# Define server
server <- function(input, output, session) {
options_tbl <- structure(
list(
transportasset_id = c(
"a40cf288-d3c0-11ed-8b73-2e080658eb35", 
"b48abb72-d3c0-11ed-8b73-2e080658eb35"
), 
transportasset_name = c(
"Asset Type #1 ", 
"Asset Type #2"
)
), 
row.names = c(NA, -2L), 
class = c(
"tbl_df",
"tbl", 
"data.frame"
)
)
var_options <- setNames(options_tbl$transportasset_id, options_tbl$transportasset_name)
output$pickerInput <- renderUI(
pickerInput(inputId = "my_picker", label = "Select an option:",
choices = var_options, 
selected = NULL, 
options = pickerOptions(
liveSearch = TRUE, 
noneSelectedText = "No commodity selected", 
size = "auto", 
title = "Select commodity"
)
),
)  

# Function to update picker input
observeEvent(input$update_button, {
options_tbl %>% print()
selected_var <- options_tbl %>% filter(transportasset_id == "b48abb72-d3c0-11ed-8b73-2e080658eb35") %>% pull(transportasset_id)
updatePickerInput(session, "my_picker", selected = selected_var)
})

}
# Run app
shinyApp(ui = ui, server = server)

不能正常工作的例子:

library(shiny)
library(shinyWidgets)
# Define options
# Define UI
ui <- fluidPage(
uiOutput("pickerInput"),
actionButton(inputId = "update_button", label = "Update selected option")
)
# Define server
server <- function(input, output, session) {
options_tbl <- structure(
list(
transportasset_id = c(
"a40cf288-d3c0-11ed-8b73-2e080658eb35", 
"b48abb72-d3c0-11ed-8b73-2e080658eb35"
), 
transportasset_name = c(
"Asset Type #1 ", 
"Asset Type #2"
)
), 
row.names = c(NA, -2L), 
class = c(
"tbl_df",
"tbl", 
"data.frame"
)
)
var_options <- setNames(options_tbl$transportasset_id, options_tbl$transportasset_name)
output$pickerInput <- renderUI(
pickerInput(inputId = "my_picker", label = "Select an option:",
choices = var_options, 
selected = NULL, 
options = pickerOptions(
liveSearch = TRUE, 
noneSelectedText = "No commodity selected", 
size = "auto", 
title = "Select commodity"
)
),
)  

# Function to update picker input
observeEvent(input$update_button, {
options_tbl %>% print()
selected_var <- options_tbl %>% filter(transportasset_id == "a40cf288-d3c0-11ed-8b73-2e080658eb35") %>% pull(transportasset_id)
updatePickerInput(session, "my_picker", selected = selected_var)
})

}
# Run app
shinyApp(ui = ui, server = server)

我不太确定为什么在选择第一个选项时失败。我切换了transportasset_id的值,仍然没有任何成功。除了那一件以外,一切似乎都是一样的。

在任何情况下,如果您在updatePickerInput()中提供choices参数,它将工作。

updatePickerInput(session, "my_picker", selected = selected_var, choices = var_options)

相关内容

  • 没有找到相关文章

最新更新