У меня есть приложение Shiny, которое использует тему bslib с загрузочной версией 5 и navbarPage в качестве основного элемента пользовательского интерфейса. Я заметил, что в этом случае PickerInput из ShinyWidgets работает неправильно. Вот пример:
library(shiny)
library(bslib)
library(shinyWidgets)
ui <- fluidPage(
theme = bs_theme(version = 5),
# Uncommenting the following line makes ALL pickerInputs work
# pickerInput("test1", "Test1", choices=c("a", "b", "c")),
navbarPage(
"Navbar title",
pickerInput("test2", "test2", choices=c("a", "b", "c")),
tabPanel(
"Tab title",
pickerInput("b", "Test1", choices=c("a", "b", "c"))
)
)
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
В результате два элемента PickerInput становятся серыми (в данном случае красными), и раскрывающийся список не открывается при нажатии на них.
Однако все меняется, если первый элемент выбора в этом коде («test1») раскомментирован. В этом случае все три элемента PickerInput работают правильно.
Единственная разница теперь заключается в том, что за пределами элемента navbarPage имеется элемент PickerInput.
Пожалуйста, помогите мне разобраться в этом. Мне не нужен элемент PickerInput за пределами navbarPage в моем окончательном приложении, но почему его размещение там решает проблему для всех элементов выбора? Как я могу решить эту проблему, не помещая куда-нибудь PickerInput?
Примечание: bslib с загрузочной версией 5, к сожалению, необходим для других частей моего приложения, я не могу просто изменить его на другую версию или удалить.





Это проблема совместимости, поскольку по умолчанию navbarPage() используется Bootstrap 3 (загрузка другого pickerInput извне отменяет это). Чтобы решить эту проблему с помощью вашего текущего подхода, явно определите theme в navbarPage():
navbarPage(
"Navbar title",
pickerInput("test2", "test2", choices=c("a", "b", "c")),
tabPanel(
"Tab title",
pickerInput("b", "Test1", choices=c("a", "b", "c"))
),
theme = bs_theme(version = 5)
)
Однако я бы не советовал так смешивать вещи. Если вам все равно придется использовать Bootstrap 5 и, в частности, bslib, то, возможно, лучше полностью использовать bslib по умолчанию, например. использовать page_fluid, page_navbar вместо их версий shiny. Примером может быть следующее:
library(shiny)
library(bslib)
library(shinyWidgets)
ui <- page_fluid(
page_navbar(
title = "Navbar title",
nav_panel(
"Tab title",
pickerInput("test1", "Test1", choices = c("a", "b", "c")),
pickerInput("test2", "Test2", choices = c("a", "b", "c"))
)
)
)
shinyApp(ui, \(...) {})