如何阻止R Shiny在页面刷新时恢复已选中的输入值?
解决Shiny页面刷新后输入值保留的问题
这个现象是浏览器的自动表单恢复机制导致的,并非Shiny自身的默认行为——浏览器会自动保存用户对表单元素(下拉选框、单选/复选框等)的修改,普通刷新时会自动填充这些值;硬刷新(Ctrl+F5)会清除浏览器的临时表单缓存,所以会回到初始设置。
你可以通过以下几种方式在Shiny内部阻止这个行为:
方法1:用JavaScript强制重置输入到默认值
在Shiny的UI中添加脚本,页面加载完成后将所有输入元素重置为初始值:
library(shiny) ui <- fluidPage( selectInput("select", "Values", LETTERS[1:5], selected='A'), radioButtons("radio", "Radio", LETTERS[1:5], selected='A'), checkboxGroupInput("check", "Checkbox", LETTERS[1:5], selected='A'), # 添加重置脚本 tags$script(HTML(" document.addEventListener('DOMContentLoaded', function() { // 通知Shiny同步输入值到默认状态 Shiny.setInputValue('select', 'A'); Shiny.setInputValue('radio', 'A'); Shiny.setInputValue('check', 'A'); }); ")) ) server <- function(input, output) {} shinyApp(ui = ui, server = server)
方法2:禁用浏览器自动补全
给每个输入元素添加autocomplete="off"属性,阻止浏览器保存和恢复输入值:
library(shiny) ui <- fluidPage( # 给selectInput添加autocomplete属性 tagAppendAttributes( selectInput("select", "Values", LETTERS[1:5], selected='A'), autocomplete = "off" ), # 给radioButtons添加autocomplete属性 tagAppendAttributes( radioButtons("radio", "Radio", LETTERS[1:5], selected='A'), autocomplete = "off" ), # 给checkboxGroupInput添加autocomplete属性 tagAppendAttributes( checkboxGroupInput("check", "Checkbox", LETTERS[1:5], selected='A'), autocomplete = "off" ) ) server <- function(input, output) {} shinyApp(ui = ui, server = server)
方法3:在Shiny会话启动时重置输入值
利用session$onSessionStarted事件,在会话初始化时强制将输入值设为默认值:
library(shiny) ui <- fluidPage( selectInput("select", "Values", LETTERS[1:5], selected='A'), radioButtons("radio", "Radio", LETTERS[1:5], selected='A'), checkboxGroupInput("check", "Checkbox", LETTERS[1:5], selected='A') ) server <- function(input, output, session) { session$onSessionStarted(function() { # 重置所有输入到默认值 updateSelectInput(session, "select", selected = 'A') updateRadioButtons(session, "radio", selected = 'A') updateCheckboxGroupInput(session, "check", selected = 'A') }) } shinyApp(ui = ui, server = server)
以上方法都能实现普通刷新页面后,输入元素回到初始默认值的效果,你可以根据需求选择合适的方案。
内容的提问来源于stack exchange,提问作者Stuart Lacy
相关产品推荐
相关产品推荐

