Shinyでは、observeステートメントはアプリの負荷で実行されるため、これを防ぐ場合があります。たとえば、特定の値で開始する2つのタイトルがあり、アプリの読み込み後に同期を取りたい場合があります。Shinyのアプリケーション負荷で監視を実行しないようにする
実行すると、すぐに1つのタイトルを更新してからもう1つのタイトルを更新するので、タイトルは無限ループで更新されます。下の "first_time"コードブロックの1つをコメント解除すると、両方のタイトルが同じ値で始まるように見えます。両方のブロックをコメント解除すると、必要な処理が実行されます。事前に指定された値で開始し、変更が行われると同期が取れます。
しかし、このコードは複雑で、すべてのオブザーバーにif
ステートメントを追加したくありません。より単純な方法が必要です。ドキュメントを見ると、おそらくsuspended = TRUE
とresume()
を使用していたようですが、例が見つかりません。
私はrelated questionと尋ねました。その答えは同様に控えめでした。何かご意見は?
library(shiny)
first_time1 <<- TRUE
first_time2 <<- TRUE
server <- function(input, output, session) {
observeEvent(input$title1, {
# if(first_time1){
# first_time1 <<- FALSE
# return()
# }
updateTextInput(session, "title2", value = input$title1)
})
observeEvent(input$title2, {
# if(first_time2){
# first_time2 <<- FALSE
# return()
# }
updateTextInput(session, "title1", value = input$title2)
})
}
ui <- fluidPage(
tabsetPanel(
tabPanel("A", textInput("title1", "titleA", "This is the title A")),
tabPanel("B", textInput("title2", "titleB", "This is title B"))
)
)
shinyApp(ui = ui, server = server)
このアプリの目標は何ですか? –