Рассмотрим этот код
library(shiny)
ui <- fluidPage(
actionButton("btn", "Click"),
uiOutput("out")
)
server <- function(input, output) {
values <- reactiveValues(foo = NULL)
observeEvent(input$btn, {
values$foo <- "bar"
Sys.sleep(1)
})
output$out <- renderUI({
values$foo
})
}
shinyApp(ui = ui, server = server)
Было бы полезно иметь возможность сказать shiny, чтобы текстовый вывод обновлялся немедленно, когда назначается реактивное значение, вместо того, чтобы ждать сброса.
(Спасибо!)
Я бы тоже хотел, чтобы эта функция была добавлена.
Если это просто текстовое поле, я считаю, что это работает (у меня оно заключено в observeEvent
):
withCallingHandlers({
shinyjs::html("txt_field", "")
message('foo')
},
message = function(m) { shinyjs::html(id = "txt_field", html = m$message, add = TRUE) }
)
Я читал это где-то в документации пакета async:
Никакие входные данные от браузера не поступают, пока не будут завершены все ожидающие асинхронные выходы / наблюдатели.
Это напомнило мне об этой проблеме. Это означает, что асинхронный режим не будет полезен тем, кто выполняет дорогостоящие вычисления и хочет продолжать использовать приложение. Я думаю, что возможность сказать shiny позволить выходному рендеру, когда он будет готов, не блокируя другие, в сочетании с новой возможностью асинхронности, будет очень мощной.
Никакие входные данные от браузера не поступают, пока не будут завершены все ожидающие асинхронные выходы / наблюдатели.
Для записи: в отношении асинхронного режима существует обходной путь без блокировки .
Самый полезный комментарий
Я читал это где-то в документации пакета async:
Это напомнило мне об этой проблеме. Это означает, что асинхронный режим не будет полезен тем, кто выполняет дорогостоящие вычисления и хочет продолжать использовать приложение. Я думаю, что возможность сказать shiny позволить выходному рендеру, когда он будет готов, не блокируя другие, в сочетании с новой возможностью асинхронности, будет очень мощной.