我想将R Shiny应用程序与一个社交网络的js SDK一起使用。我想从js API获取用户ID,并将其设置为textInput表单的默认值。 但是只有一次,这是第一次。
使用Shiny.onInputChange()
函数(或Shiny.setInputValue()
代表闪亮的> 1.1),我设法获得了最好的结果
玩具示例:
ui <- fluidPage(
textInput("uid",label = h4("Input ID"),value = "1"),
actionButton("goButton", "Check this out!", class="btn-primary"),
# getting user id via js
tags$script(HTML(
'
uid = some_js_code;
console.log("My uid - " + uid);
// setting new value for input$uid variable
Shiny.onInputChange("uid", uid);
// for newer version of shiny
//Shiny.setInputValue("uid", uid);
'
)
server <- function(input, output, session) {
user<-reactive({
input$goButton
user <- some_function_for_uid(input$uid)
})
}
问题:
在首次加载应用程序时,变量“ uid”的值未更改。该值保持不变,如textInput函数(value="1"
)
服务器功能some_function_for_uid()
仅接收变量 的新值。但是,文本形式的值仍然保持不变。
如何正确更改textInput中的默认值并避免描述的问题? 预先谢谢你。
答案 0 :(得分:1)
要更新textInput
中的值:
$("#uid").val(uid);
我不知道您想使用该按钮做什么。这样可以吗:
ui <- fluidPage(
textInput("uid", label = h4("Input ID"), value = "1"),
verbatimTextOutput("showUID"),
#actionButton("goButton", "Check this out!", class="btn-primary"),
tags$script(HTML(
'
uid = "hello";
// setting new value in the textInput
$("#uid").val(uid);
// setting new value for input$uid variable
Shiny.onInputChange("uid", uid);
'
))
)
server <- function(input, output, session) {
user <- eventReactive(input$uid, {
rep(input$uid, 3)
})
output[["showUID"]] <- renderText({user()})
}