Странное поведение PickerInput, как решить проблему?

У меня есть приложение 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, к сожалению, необходим для других частей моего приложения, я не могу просто изменить его на другую версию или удалить.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
98
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это проблема совместимости, поскольку по умолчанию 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, \(...) {})

Другие вопросы по теме