bs4Dash中onRestore函数失效,求可行解决方案?
解决bs4Dash Shiny应用书签恢复无法记住文本输入值的问题
问题说明
在基于bs4Dash构建的Shiny应用中,启用URL书签功能后,恢复书签链接时,文本输入框的内容无法被正确恢复,即使手动在onRestore函数中尝试更新输入值也不生效。
复现代码
library(bs4Dash) library(shiny) ui <- dashboardPage( header = dashboardHeader(), sidebar = dashboardSidebar(), body = dashboardBody( textInput("text", "Enter some text:"), bookmarkButton() ) ) server <- function(input, output, session) { onRestore(function(state) { updateTextInput(session, "text", value = state$input$text) }) } shinyApp(ui, server, enableBookmarking = "url")
解决方案
问题核心是bs4Dash的dashboardPage默认未启用书签支持,需显式设置bookmarking = TRUE参数,让Shiny的书签机制能正确捕获页面内输入组件的状态。同时无需手动编写onRestore逻辑,Shiny默认书签恢复机制会自动处理输入值的恢复。
修正后的代码
library(bs4Dash) library(shiny) ui <- dashboardPage( header = dashboardHeader(), sidebar = dashboardSidebar(), body = dashboardBody( textInput("text", "Enter some text:"), bookmarkButton() ), # 开启bs4Dash的书签支持 bookmarking = TRUE ) server <- function(input, output, session) { # 原生输入组件无需手动处理恢复逻辑 } shinyApp(ui, server, enableBookmarking = "url")
补充说明
如果应用包含自定义复杂组件需要特殊处理书签恢复,才需要使用onRestore函数。对于textInput这类原生Shiny输入组件,只要开启bs4Dash的bookmarking参数,配合Shiny的enableBookmarking = "url",就能自动完成书签的保存与恢复。
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

