You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 16:32:10