通过js在R Shiny中设置默认的textInput值(作为js函数的结果)

时间:2019-04-08 11:17:42

标签: javascript r shiny

我想将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)

  })

}

问题:

  1. 在首次加载应用程序时,变量“ uid”的值未更改。该值保持不变,如textInput函数(value="1"

  2. 当我按下goButton时,
  3. 服务器功能some_function_for_uid()仅接收变量 的新值。但是,文本形式的值仍然保持不变。

如何正确更改textInput中的默认值并避免描述的问题? 预先谢谢你。

1 个答案:

答案 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()})

}