停止更新*来自无效反应的输入
Stop update*Input from invalidating reactive
我正在寻找一种方法来阻止 update*Input
函数使我的 Shiny 应用程序中的反应值无效。我希望更新功能仅更改视觉 UI 组件,而不更改基础反应值。
这是一个代表:
library(shiny)
ui <- fluidPage(
sliderInput("slide1", "Slider", min = 0, max = 10, value = 5),
sliderInput("slide2", "Slider2", min = 0, max = 10, value = 0),
textOutput("slide2_val")
)
server <- function(input, output, session) {
observe({
updateSliderInput(session, "slide2", value = input$slide1)
}) |>
bindEvent(input$slide1)
output$slide2_val <- renderText({
paste("Value of `slide2`:", input$slide2)
})
}
shinyApp(ui, server)
期望的行为是 input$slide2
的值仅在用户与 slide2 交互时更改,而滑块 UI 元素在与 slide1 或 slide2 交互时更改。
重要的是,这需要适用于各种 input*
功能。监听点击事件不适用于像 selectInput
这样的输入(见我的 related issue)。
在我的 recent answer to another question
我做了一个 suspendForNextFlush()
函数来暂时停止对一个
输入被发送到 Shiny。该功能可用于解决您的问题
问题也一样。
我已经把这个功能放在实验中了
shinysuspend 包。你可以
从 GitHub 安装它:
remotes::install_github("mikmart/shinysuspend")
然后在 UI 中包含 useShinysuspend()
,然后调用 suspendForNextFlush()
从服务器更新 slide2
时:
library(shiny)
library(shinysuspend)
ui <- fluidPage(
useShinysuspend(),
sliderInput("slide1", "Slider 1", min = 0, max = 10, value = 5),
sliderInput("slide2", "Slider 2", min = 0, max = 10, value = 0),
textOutput("slide2_val")
)
server <- function(input, output, session) {
observe({
suspendForNextFlush("slide2")
updateSliderInput(session, "slide2", value = input$slide1)
})
output$slide2_val <- renderText({
paste("Value of `slide2`:", input$slide2)
})
}
shinyApp(ui, server)
我正在寻找一种方法来阻止 update*Input
函数使我的 Shiny 应用程序中的反应值无效。我希望更新功能仅更改视觉 UI 组件,而不更改基础反应值。
这是一个代表:
library(shiny)
ui <- fluidPage(
sliderInput("slide1", "Slider", min = 0, max = 10, value = 5),
sliderInput("slide2", "Slider2", min = 0, max = 10, value = 0),
textOutput("slide2_val")
)
server <- function(input, output, session) {
observe({
updateSliderInput(session, "slide2", value = input$slide1)
}) |>
bindEvent(input$slide1)
output$slide2_val <- renderText({
paste("Value of `slide2`:", input$slide2)
})
}
shinyApp(ui, server)
期望的行为是 input$slide2
的值仅在用户与 slide2 交互时更改,而滑块 UI 元素在与 slide1 或 slide2 交互时更改。
重要的是,这需要适用于各种 input*
功能。监听点击事件不适用于像 selectInput
这样的输入(见我的 related issue)。
在我的 recent answer to another question
我做了一个 suspendForNextFlush()
函数来暂时停止对一个
输入被发送到 Shiny。该功能可用于解决您的问题
问题也一样。
我已经把这个功能放在实验中了 shinysuspend 包。你可以 从 GitHub 安装它:
remotes::install_github("mikmart/shinysuspend")
然后在 UI 中包含 useShinysuspend()
,然后调用 suspendForNextFlush()
从服务器更新 slide2
时:
library(shiny)
library(shinysuspend)
ui <- fluidPage(
useShinysuspend(),
sliderInput("slide1", "Slider 1", min = 0, max = 10, value = 5),
sliderInput("slide2", "Slider 2", min = 0, max = 10, value = 0),
textOutput("slide2_val")
)
server <- function(input, output, session) {
observe({
suspendForNextFlush("slide2")
updateSliderInput(session, "slide2", value = input$slide1)
})
output$slide2_val <- renderText({
paste("Value of `slide2`:", input$slide2)
})
}
shinyApp(ui, server)