我正在寻找一种方法来阻止update*Input个函数在我shiny 的应用程序中失效react 值.我希望update函数只更改可视化UI组件,而不是底层的被动值.

这里有一个reprex:

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交互时更改,但slider UI元素在与slide1或slide2交互时更改.

重要的是,这需要适用于各种input*功能.监听点击事件对于selectInput这样的输入不起作用(参见my related issue).

推荐答案

在我recent answer to another question岁的时候

我已经把这个函数放到了实验中

remotes::install_github("mikmart/shinysuspend")

然后在UI中包含useShinysuspend(),然后调用suspendForNextFlush()

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)

R相关问答推荐

然后根据不同的列值有条件地执行函数

如何在emmeans中计算连续变量的对比度

二维样条,严格以一个参数递增

如果第一个列表中的元素等于第二个列表的元素,则替换为第三个列表的元素

如何使用STAT_SUMMARY向ggplot2中的密度图添加垂直线

移除仪表板Quarto中顶盖和车身之间的白色区域

将Posict转换为数字时的负时间(以秒为单位)

如何在ggplot2中绘制具有特定 colored颜色 的连续色轮

函数可以跨多个列搜索多个字符串并创建二进制输出变量

我如何使用tidyselect来传递一个符号数组,比如Pivot_Long?

在不对R中的变量分组的情况下取两行的平均值

有没有办法将不等长的列表转换为R中的数据帧

网络抓取新闻标题和时间

如何移动点以使它们的打印不重叠

整理ggmosaic图的标签

策略表单连接两个非常大的箭头数据集,而不会 destruct 内存使用

Data.table条件合并

使用另一列中的增长率外推R(使用dplyr)

使用grepl过滤特定列范围内的列名

使用R中的`quote()`函数生成多变量表达式