【发布时间】:2021-01-01 01:45:40
【问题描述】:
我正在尝试使用 JS 和来自服务器的输入来更改 Shiny 上的输入(因此该值可以是有条件的)。 在此示例中,我已将值固定为“NJ”,但最后 id 就像这个值一样是动态的。我试图实现的最终结果是在单击按钮时让下拉菜单更改为一个值(此处为“NJ”)。下面的工作示例。
我的 JS 知识很浅,大部分来自阅读 R 文档,例如下面的文档。
https://shiny.rstudio.com/articles/communicating-with-js.html
library("shiny")
ui <- fluidPage(
tags$script("Shiny.addCustomMessageHandler('change_sel', function(x){
Shiny.setInputValue('state', x,{priority: 'event'});
});")
,
column(6,
selectInput("state", "Choose a state:",
c("NY", "NJ", "CT")
),
column(6,
actionButton("but1", "Change to NJ"
)
)))
server <- function(input, output, session) {
observeEvent(input$but1, {
session$sendCustomMessage("change_sel", "NJ")
})
observe(print(input$state))
}
shinyApp(ui, server)
【问题讨论】:
-
由于您使用的是闪亮的输入组件,我建议使用
updateSelectInput函数(在闪亮的 pkg 中可用)。通过 JS 设置输入值最适合自定义输入组件(即非闪亮元素)。如果您使用的是自定义组件,您可以在自定义输入绑定中通过session$sendInputMessage(R 中)和receiveInputMessage修改组件的状态。 -
感谢@dcruvolo,您能否详细说明如何使用receiveInputMessage?该示例仅使用 Shiny 组件,但我的最终目标是 bs4Dash 组件的解决方法。
-
嘿@Ben - 请参阅下面的回复
标签: javascript r shiny