【问题标题】:R Shiny state management with jQuery access使用 jQuery 访问的 R Shiny 状态管理
【发布时间】:2022-06-14 23:14:33
【问题描述】:

如何使用 R Shiny 存储用户定义的应用程序状态,以便在 R 代码和 jQuery 代码中都可以访问它?

例如,我的应用有两个状态blackwhite。用于存储当前状态的选项包括

  • 作为 DOM 中的隐藏文本
  • 作为 DOM 元素的数据属性
  • 在浏览器上使用本地存储

为了这个目的,Shiny 中是否有更好的方法?类似于在 R 中定义的全局变量,可以在 jQuery 中读取而无需发送消息。

【问题讨论】:

    标签: shiny


    【解决方案1】:

    JavaScript 通信的规范方法确实是通过sending a message

    当然你也可以依赖纯HTML <-> JS通信方式:

    library(shiny)
    
    read_js <- "$(function() {
      $('#output').append(`Text from data: ${$('#constant_data').data('state')}`, 
                          $('<br>'),
                          `Text from hidden: ${$('#constant_hidden').text()}`,
                          $('<br>'),
                          `Text from session: ${sessionStorage.getItem('constant_session')}`,
                          $('<br>'),
                          `Text from window: ${window.state}`);
    });
    "
    
    
    ui <- fluidPage(
       tags$head(tags$script("sessionStorage.setItem('constant_session', 'black');
                              window.state = 'black';")),
       tags$head(tags$script(HTML(read_js))),
       div(id = "constant_data", `data-state` = "black"),
       div(id = "constant_hidden", "black", style = "display: none"),
       div(id = "output"),
    )
    
    server <- function(input, output, session) {
    }
    
    shinyApp(ui, server)
    

    方法的选择取决于你。

    一些可能指导您选择的问题:

    1. 状态应该在 DOM 中可见吗?
    2. 状态会随时间变化吗?
    3. 状态是否应该在会话中保持不变?

    【讨论】:

      猜你喜欢
      • 2019-02-15
      • 1970-01-01
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多