#r #shiny #shiny-reactivity
#r #блестящий #блестящий -реактивность
Вопрос:
У меня есть блестящее приложение с функцией сервера, например;
shinyServer(function(input, output) {
chosen_fam <- reactive({ input$fam })
output$newui <- renderUI({ NewProductUI("newproduct", fam = chosen_fam()) })
output$newbtn <- renderUI({ NewProductButtonUI("newproduct", fam = chosen_fam()) })
callModule(NewProduct, id = "newproduct", fam = chosen_fam())
})
Внутри модуля NewProduct есть что-то вроде этого:
NewProduct <- function(input, output, session, fam){
observeEvent(input$submitnew, {
print(paste0("Adding.... ", fam))
row <- c(fam, input$variable)
upload_to_googlesheets(token, row)
})
Пользовательский интерфейс отображается в зависимости от выбранного семейства, и серверный модуль также выполняет разные действия в зависимости от семейства.
Пользовательский интерфейс рендеринга, похоже, работает нормально, но переменная «fam» в callModule
не обновляется (следовательно, это всегда результат первого выбранного семейства). Переменные из входных данных проходят нормально, поэтому я полагаю, что это как-то связано с областью видимости (возможно, он ищет «fam» в пространстве имен «newproduct»?).
Как мне явно указать callModule
использовать реактивное выражение из пространства имен сеанса? Или есть способ, которым я могу просто добавить переменную fam в пространство имен «newproduct»?
Ответ №1:
Вы должны предоставить сам реактивный проводник:
callModule(NewProduct, id = "newproduct", fam = chosen_fam)
(без скобок). И в модуле:
row <- c(fam(), input$variable)
(круглые скобки).